From 825b9be7c20ced64d86516aaea2d46ea2a708703 Mon Sep 17 00:00:00 2001 From: Peter Pentchev Date: Fri, 23 Oct 2020 10:03:58 +0100 Subject: [PATCH] Import zchunk_1.1.7+ds1.orig.tar.xz [dgit import orig zchunk_1.1.7+ds1.orig.tar.xz] --- .dockerignore | 2 + .gitignore | 4 + DOCKER_TESTING.md | 10 + Jenkinsfile | 19 + LICENSE | 25 + README.md | 56 + autotest/alpine-edge/build.sh | 12 + autotest/alpine-edge/build/Dockerfile | 6 + autotest/alpine-edge/prep.sh | 7 + autotest/alpine-edge/prep/Dockerfile | 3 + autotest/alpine-edge/test.sh | 15 + autotest/centos-7/build.sh | 12 + autotest/centos-7/build/Dockerfile | 6 + autotest/centos-7/prep.sh | 7 + autotest/centos-7/prep/Dockerfile | 2 + autotest/centos-7/test.sh | 15 + autotest/debian-latest/build.sh | 12 + autotest/debian-latest/build/Dockerfile | 6 + autotest/debian-latest/prep.sh | 7 + autotest/debian-latest/prep/Dockerfile | 2 + autotest/debian-latest/test.sh | 15 + autotest/fedora-latest/build.sh | 12 + autotest/fedora-latest/build/Dockerfile | 6 + autotest/fedora-latest/prep.sh | 7 + autotest/fedora-latest/prep/Dockerfile | 2 + autotest/fedora-latest/test.sh | 15 + autotest/opensuse-leap/build.sh | 12 + autotest/opensuse-leap/build/Dockerfile | 6 + autotest/opensuse-leap/prep.sh | 7 + autotest/opensuse-leap/prep/Dockerfile | 2 + autotest/opensuse-leap/test.sh | 15 + autotest/ubuntu-rolling/build.sh | 12 + autotest/ubuntu-rolling/build/Dockerfile | 6 + autotest/ubuntu-rolling/prep.sh | 7 + autotest/ubuntu-rolling/prep/Dockerfile | 2 + autotest/ubuntu-rolling/test.sh | 15 + contrib/gen_xml_dictionary | 47 + doc/unzck.1 | 103 + doc/zck.1 | 110 + doc/zck_delta_size.1 | 89 + doc/zck_gen_zdict.1 | 92 + doc/zck_read_header.1 | 87 + doc/zckdl.1 | 90 + include/meson.build | 5 + include/zck.h.in | 373 + meson.build | 70 + meson_options.txt | 3 + prep-Jenkinsfile | 11 + src/lib/buzhash/LICENSE | 19 + src/lib/buzhash/buzhash.c | 136 + src/lib/buzhash/buzhash.h | 19 + src/lib/buzhash/meson.build | 1 + src/lib/comp/comp.c | 729 ++ src/lib/comp/meson.build | 5 + src/lib/comp/nocomp/meson.build | 1 + src/lib/comp/nocomp/nocomp.c | 132 + src/lib/comp/nocomp/nocomp.h | 6 + src/lib/comp/zstd/meson.build | 1 + src/lib/comp/zstd/zstd.c | 225 + src/lib/comp/zstd/zstd.h | 6 + src/lib/compint.c | 110 + src/lib/dl/dl.c | 416 + src/lib/dl/meson.build | 1 + src/lib/dl/multipart.c | 254 + src/lib/dl/range.c | 214 + src/lib/error.c | 107 + src/lib/hash/hash.c | 532 ++ src/lib/hash/meson.build | 5 + src/lib/hash/sha1/meson.build | 1 + src/lib/hash/sha1/sha1.c | 157 + src/lib/hash/sha1/sha1.h | 62 + src/lib/hash/sha2/meson.build | 1 + src/lib/hash/sha2/sha2.c | 949 +++ src/lib/hash/sha2/sha2.h | 108 + src/lib/header.c | 568 ++ src/lib/index/index_common.c | 94 + src/lib/index/index_create.c | 192 + src/lib/index/index_read.c | 265 + src/lib/index/meson.build | 1 + src/lib/io.c | 125 + src/lib/log.c | 62 + src/lib/meson.build | 15 + src/lib/uthash.h | 1227 +++ src/lib/zck.c | 417 + src/lib/zck_private.h | 427 ++ src/memmem.c | 64 + src/memmem.h | 4 + src/meson.build | 50 + src/unzck.c | 247 + src/util_common.c | 37 + src/util_common.h | 13 + src/zck.c | 299 + src/zck_delta_size.c | 200 + src/zck_dl.c | 483 ++ src/zck_gen_zdict.c | 319 + src/zck_read_header.c | 203 + test/abi.sh | 34 + .../zchunk/1.1.6_to_1.1.7/compat_report.html | 502 ++ test/copy_chunks.c | 123 + test/empty.c | 111 + test/files/LICENSE.dict | Bin 0 -> 4096 bytes test/files/LICENSE.dict.fodt.zck | Bin 0 -> 125874 bytes test/files/LICENSE.fodt | 6704 +++++++++++++++++ test/files/LICENSE.header.new.nodict.fodt.zck | Bin 0 -> 432 bytes test/files/LICENSE.manual.dict.fodt.zck | Bin 0 -> 442761 bytes test/files/LICENSE.manual.nodict.fodt.zck | Bin 0 -> 786977 bytes test/files/LICENSE.nocomp.fodt.zck | Bin 0 -> 949231 bytes test/files/LICENSE.nodict.fodt.zck | Bin 0 -> 131073 bytes test/files/empty.optelems.zck | Bin 0 -> 146 bytes test/invalid_input_checksum.c | 68 + test/lib/meson.build | 2 + test/lib/util.c | 52 + test/lib/util.h | 29 + test/meson.build | 307 + test/new_abi.sh | 14 + test/optelems.c | 73 + test/read_single_chunk.c | 113 + test/read_single_comp_chunk.c | 102 + test/shacheck.c | 114 + zchunk_format.txt | 238 + 120 files changed, 19544 insertions(+) create mode 100644 .dockerignore create mode 100644 .gitignore create mode 100644 DOCKER_TESTING.md create mode 100644 Jenkinsfile create mode 100644 LICENSE create mode 100644 README.md create mode 100755 autotest/alpine-edge/build.sh create mode 100644 autotest/alpine-edge/build/Dockerfile create mode 100755 autotest/alpine-edge/prep.sh create mode 100644 autotest/alpine-edge/prep/Dockerfile create mode 100755 autotest/alpine-edge/test.sh create mode 100755 autotest/centos-7/build.sh create mode 100644 autotest/centos-7/build/Dockerfile create mode 100755 autotest/centos-7/prep.sh create mode 100644 autotest/centos-7/prep/Dockerfile create mode 100755 autotest/centos-7/test.sh create mode 100755 autotest/debian-latest/build.sh create mode 100644 autotest/debian-latest/build/Dockerfile create mode 100755 autotest/debian-latest/prep.sh create mode 100644 autotest/debian-latest/prep/Dockerfile create mode 100755 autotest/debian-latest/test.sh create mode 100755 autotest/fedora-latest/build.sh create mode 100644 autotest/fedora-latest/build/Dockerfile create mode 100755 autotest/fedora-latest/prep.sh create mode 100644 autotest/fedora-latest/prep/Dockerfile create mode 100755 autotest/fedora-latest/test.sh create mode 100755 autotest/opensuse-leap/build.sh create mode 100644 autotest/opensuse-leap/build/Dockerfile create mode 100755 autotest/opensuse-leap/prep.sh create mode 100644 autotest/opensuse-leap/prep/Dockerfile create mode 100755 autotest/opensuse-leap/test.sh create mode 100755 autotest/ubuntu-rolling/build.sh create mode 100644 autotest/ubuntu-rolling/build/Dockerfile create mode 100755 autotest/ubuntu-rolling/prep.sh create mode 100644 autotest/ubuntu-rolling/prep/Dockerfile create mode 100755 autotest/ubuntu-rolling/test.sh create mode 100755 contrib/gen_xml_dictionary create mode 100644 doc/unzck.1 create mode 100644 doc/zck.1 create mode 100644 doc/zck_delta_size.1 create mode 100644 doc/zck_gen_zdict.1 create mode 100644 doc/zck_read_header.1 create mode 100644 doc/zckdl.1 create mode 100644 include/meson.build create mode 100644 include/zck.h.in create mode 100644 meson.build create mode 100644 meson_options.txt create mode 100644 prep-Jenkinsfile create mode 100644 src/lib/buzhash/LICENSE create mode 100644 src/lib/buzhash/buzhash.c create mode 100644 src/lib/buzhash/buzhash.h create mode 100644 src/lib/buzhash/meson.build create mode 100644 src/lib/comp/comp.c create mode 100644 src/lib/comp/meson.build create mode 100644 src/lib/comp/nocomp/meson.build create mode 100644 src/lib/comp/nocomp/nocomp.c create mode 100644 src/lib/comp/nocomp/nocomp.h create mode 100644 src/lib/comp/zstd/meson.build create mode 100644 src/lib/comp/zstd/zstd.c create mode 100644 src/lib/comp/zstd/zstd.h create mode 100644 src/lib/compint.c create mode 100644 src/lib/dl/dl.c create mode 100644 src/lib/dl/meson.build create mode 100644 src/lib/dl/multipart.c create mode 100644 src/lib/dl/range.c create mode 100644 src/lib/error.c create mode 100644 src/lib/hash/hash.c create mode 100644 src/lib/hash/meson.build create mode 100644 src/lib/hash/sha1/meson.build create mode 100644 src/lib/hash/sha1/sha1.c create mode 100644 src/lib/hash/sha1/sha1.h create mode 100644 src/lib/hash/sha2/meson.build create mode 100644 src/lib/hash/sha2/sha2.c create mode 100644 src/lib/hash/sha2/sha2.h create mode 100644 src/lib/header.c create mode 100644 src/lib/index/index_common.c create mode 100644 src/lib/index/index_create.c create mode 100644 src/lib/index/index_read.c create mode 100644 src/lib/index/meson.build create mode 100644 src/lib/io.c create mode 100644 src/lib/log.c create mode 100644 src/lib/meson.build create mode 100644 src/lib/uthash.h create mode 100644 src/lib/zck.c create mode 100644 src/lib/zck_private.h create mode 100644 src/memmem.c create mode 100644 src/memmem.h create mode 100644 src/meson.build create mode 100644 src/unzck.c create mode 100644 src/util_common.c create mode 100644 src/util_common.h create mode 100644 src/zck.c create mode 100644 src/zck_delta_size.c create mode 100644 src/zck_dl.c create mode 100644 src/zck_gen_zdict.c create mode 100644 src/zck_read_header.c create mode 100755 test/abi.sh create mode 100644 test/compat_reports/zchunk/1.1.6_to_1.1.7/compat_report.html create mode 100644 test/copy_chunks.c create mode 100644 test/empty.c create mode 100644 test/files/LICENSE.dict create mode 100644 test/files/LICENSE.dict.fodt.zck create mode 100644 test/files/LICENSE.fodt create mode 100644 test/files/LICENSE.header.new.nodict.fodt.zck create mode 100644 test/files/LICENSE.manual.dict.fodt.zck create mode 100644 test/files/LICENSE.manual.nodict.fodt.zck create mode 100644 test/files/LICENSE.nocomp.fodt.zck create mode 100644 test/files/LICENSE.nodict.fodt.zck create mode 100644 test/files/empty.optelems.zck create mode 100644 test/invalid_input_checksum.c create mode 100644 test/lib/meson.build create mode 100644 test/lib/util.c create mode 100644 test/lib/util.h create mode 100644 test/meson.build create mode 100755 test/new_abi.sh create mode 100644 test/optelems.c create mode 100644 test/read_single_chunk.c create mode 100644 test/read_single_comp_chunk.c create mode 100644 test/shacheck.c create mode 100644 zchunk_format.txt diff --git a/.dockerignore b/.dockerignore new file mode 100644 index 0000000..8952ac2 --- /dev/null +++ b/.dockerignore @@ -0,0 +1,2 @@ +build +covint diff --git a/.gitignore b/.gitignore new file mode 100644 index 0000000..7265574 --- /dev/null +++ b/.gitignore @@ -0,0 +1,4 @@ +cov-int +/build +test/abi/new +test/abi/stable/ABI.dump diff --git a/DOCKER_TESTING.md b/DOCKER_TESTING.md new file mode 100644 index 0000000..51b00fc --- /dev/null +++ b/DOCKER_TESTING.md @@ -0,0 +1,10 @@ +Dockerfiles are available to test the latest build on different platforms: + + * fedora:latest - autotest/fedora-latest + * centos:latest - autotest/centos-latest + * ubuntu:rolling - autotest/ubuntu-rolling + * opensuse/leap - autotest/opensuse-leap + * debian:latest - autotest/debian-latest + +To test, in the project root directory, run:
+```./autotest//test.sh``` diff --git a/Jenkinsfile b/Jenkinsfile new file mode 100644 index 0000000..5f3df2d --- /dev/null +++ b/Jenkinsfile @@ -0,0 +1,19 @@ +node { + checkout scm + stage('Build') { + sh "./autotest/fedora-latest/build.sh" + sh "./autotest/centos-7/build.sh" + sh "./autotest/opensuse-leap/build.sh" + sh "./autotest/alpine-edge/build.sh" + sh "./autotest/debian-latest/build.sh" + sh "./autotest/ubuntu-rolling/build.sh" + } + stage('Test') { + sh "./autotest/fedora-latest/test.sh" + sh "./autotest/centos-7/test.sh" + sh "./autotest/opensuse-leap/test.sh" + sh "./autotest/alpine-edge/test.sh" + sh "./autotest/debian-latest/test.sh" + sh "./autotest/ubuntu-rolling/test.sh" + } +} diff --git a/LICENSE b/LICENSE new file mode 100644 index 0000000..2f1b5be --- /dev/null +++ b/LICENSE @@ -0,0 +1,25 @@ +BSD 2-Clause License + +Copyright (c) 2018 Jonathan Dieter +All rights reserved. + +Redistribution and use in source and binary forms, with or without +modification, are permitted provided that the following conditions are met: + + 1. Redistributions of source code must retain the above copyright notice, this + list of conditions and the following disclaimer. + + 2. Redistributions in binary form must reproduce the above copyright notice, + this list of conditions and the following disclaimer in the documentation + and/or other materials provided with the distribution. + +THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" +AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE +IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE +DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE +FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL +DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR +SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER +CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, +OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE +OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. diff --git a/README.md b/README.md new file mode 100644 index 0000000..379ebe0 --- /dev/null +++ b/README.md @@ -0,0 +1,56 @@ +# zchunk + +[![Coverity Scan Build Status](https://img.shields.io/coverity/scan/16509.svg)](https://scan.coverity.com/projects/zchunk-zchunk)
+[![Jenkins Build Status](https://jenkins.zchunk.net/buildStatus/icon?job=zchunk)](https://jenkins.zchunk.net) + +zchunk is a compressed file format that splits the file into independent chunks. +This allows you to only download changed chunks when downloading a new version +of the file, and also makes zchunk files efficient over rsync. + +zchunk files are protected with strong checksums to verify that the file you +downloaded is, in fact, the file you wanted. + +**As of zchunk-1.0, the ABI and API have been marked stable, and the only changes +allowed are backwards-compatible additions** + +## Installation +To build and install zchunk, first install meson and run +``` +meson build +cd build +ninja +ninja test +sudo ninja install +``` + +If you're building on an operating system where some libraries are stored in +/usr/local, you'll need to replace `meson build` above as follows: +``` +CFLAGS=-I/usr/local/include CXXFLAGS=-I/usr/local/include LDFLAGS=-L/usr/local/lib meson build +``` + +## Using the utilities +To decompress a zchunk file, simply run: +``` +unzck +``` + +To compress a new zchunk file, run: +``` +zck +``` + +To download a zchunk file, run: +``` +zckdl -s +``` + +To read a zchunk header, run: +``` +zck_read_header +``` + +## Documentation +- [Format definition](zchunk_format.txt) +- [Initial announcement](https://www.jdieter.net/posts/2018/04/30/introducing-zchunk) +- [How zchunk works (with pretty pictures)](https://www.jdieter.net/posts/2018/05/31/what-is-zchunk) diff --git a/autotest/alpine-edge/build.sh b/autotest/alpine-edge/build.sh new file mode 100755 index 0000000..a406c6c --- /dev/null +++ b/autotest/alpine-edge/build.sh @@ -0,0 +1,12 @@ +#!/bin/sh +# Build zchunk-alpine:edge if it doesn't exist +HAVE_IMAGE=$(docker image ls -q zchunk-alpine:edge) +if [ "$HAVE_IMAGE" == "" ]; then + autotest/alpine-edge/prep.sh + if [ "$?" -ne 0 ]; then + exit 1 + fi +fi +docker image rm zchunk-alpine:test -f 2>/dev/null 1>/dev/null +docker image build -t zchunk-alpine:test --file autotest/alpine-edge/build/Dockerfile ./ + diff --git a/autotest/alpine-edge/build/Dockerfile b/autotest/alpine-edge/build/Dockerfile new file mode 100644 index 0000000..4e3b130 --- /dev/null +++ b/autotest/alpine-edge/build/Dockerfile @@ -0,0 +1,6 @@ +FROM zchunk-alpine:edge +ADD ./ /code +WORKDIR /code +RUN meson build && cd build && ninja || cat /code/build/meson-logs/meson-log.txt +WORKDIR /code/build +CMD ninja test diff --git a/autotest/alpine-edge/prep.sh b/autotest/alpine-edge/prep.sh new file mode 100755 index 0000000..9a63b9a --- /dev/null +++ b/autotest/alpine-edge/prep.sh @@ -0,0 +1,7 @@ +#!/bin/sh +docker pull alpine:edge +if [ "$?" -ne 0 ]; then + exit 1 +fi +docker image rm -f zchunk-alpine:edge 2>/dev/null 1>/dev/null +docker image build -t zchunk-alpine:edge --file autotest/alpine-edge/prep/Dockerfile ./ diff --git a/autotest/alpine-edge/prep/Dockerfile b/autotest/alpine-edge/prep/Dockerfile new file mode 100644 index 0000000..fd623d5 --- /dev/null +++ b/autotest/alpine-edge/prep/Dockerfile @@ -0,0 +1,3 @@ +FROM alpine:edge + +RUN apk add meson gcc musl-dev zstd-dev curl-dev openssl-dev argp-standalone diff --git a/autotest/alpine-edge/test.sh b/autotest/alpine-edge/test.sh new file mode 100755 index 0000000..4cdc2e1 --- /dev/null +++ b/autotest/alpine-edge/test.sh @@ -0,0 +1,15 @@ +#!/bin/sh +# Build zchunk-alpine:edge if it doesn't exist +HAVE_IMAGE=$(docker image ls -q zchunk-alpine:test) +if [ "$HAVE_IMAGE" == "" ]; then + autotest/alpine-edge/build.sh + if [ "$?" -ne 0 ]; then + exit 1 + fi +fi +docker rm zchunk-alpine-test -f 2>/dev/null 1>/dev/null +docker run --name zchunk-alpine-test zchunk-alpine:test +RETVAL=$? +docker rm zchunk-alpine-test -f 2>/dev/null 1>/dev/null +docker image rm zchunk-alpine:test -f 2>/dev/null 1>/dev/null +exit $RETVAL diff --git a/autotest/centos-7/build.sh b/autotest/centos-7/build.sh new file mode 100755 index 0000000..3064cdd --- /dev/null +++ b/autotest/centos-7/build.sh @@ -0,0 +1,12 @@ +#!/bin/sh +# Build zchunk-centos:7 if it doesn't exist +HAVE_IMAGE=$(docker image ls -q zchunk-centos:7) +if [ "$HAVE_IMAGE" == "" ]; then + autotest/centos-7/prep.sh + if [ "$?" -ne 0 ]; then + exit 1 + fi +fi +docker image rm zchunk-centos:test -f 2>/dev/null 1>/dev/null +docker image build -t zchunk-centos:test --file autotest/centos-7/build/Dockerfile ./ + diff --git a/autotest/centos-7/build/Dockerfile b/autotest/centos-7/build/Dockerfile new file mode 100644 index 0000000..3f39e3e --- /dev/null +++ b/autotest/centos-7/build/Dockerfile @@ -0,0 +1,6 @@ +FROM zchunk-centos:7 +ADD ./ /code +WORKDIR /code +RUN meson build --auto-features=enabled && cd build && ninja-build +WORKDIR /code/build +CMD ninja-build test diff --git a/autotest/centos-7/prep.sh b/autotest/centos-7/prep.sh new file mode 100755 index 0000000..a5e8098 --- /dev/null +++ b/autotest/centos-7/prep.sh @@ -0,0 +1,7 @@ +#!/bin/sh +docker pull centos:7 +if [ "$?" -ne 0 ]; then + exit 1 +fi +docker image rm -f zchunk-centos:7 2>/dev/null 1>/dev/null +docker image build -t zchunk-centos:7 --file autotest/centos-7/prep/Dockerfile ./ diff --git a/autotest/centos-7/prep/Dockerfile b/autotest/centos-7/prep/Dockerfile new file mode 100644 index 0000000..d06cc9c --- /dev/null +++ b/autotest/centos-7/prep/Dockerfile @@ -0,0 +1,2 @@ +FROM centos:7 +RUN yum -y install epel-release && yum -y update epel-release && yum -y install meson gcc "pkgconfig(libzstd)" "pkgconfig(libcurl)" "pkgconfig(openssl)" && rm -rf /var/cache/yum diff --git a/autotest/centos-7/test.sh b/autotest/centos-7/test.sh new file mode 100755 index 0000000..8034035 --- /dev/null +++ b/autotest/centos-7/test.sh @@ -0,0 +1,15 @@ +#!/bin/sh +# Build zchunk-centos:7 if it doesn't exist +HAVE_IMAGE=$(docker image ls -q zchunk-centos:test) +if [ "$HAVE_IMAGE" == "" ]; then + autotest/centos-7/build.sh + if [ "$?" -ne 0 ]; then + exit 1 + fi +fi +docker rm zchunk-centos-test -f 2>/dev/null 1>/dev/null +docker run --name zchunk-centos-test zchunk-centos:test +RETVAL=$? +docker rm zchunk-centos-test -f 2>/dev/null 1>/dev/null +docker image rm zchunk-centos:test -f 2>/dev/null 1>/dev/null +exit $RETVAL diff --git a/autotest/debian-latest/build.sh b/autotest/debian-latest/build.sh new file mode 100755 index 0000000..c2c21b4 --- /dev/null +++ b/autotest/debian-latest/build.sh @@ -0,0 +1,12 @@ +#!/bin/sh +# Build zchunk-debian:latest if it doesn't exist +HAVE_IMAGE=$(docker image ls -q zchunk-debian:latest) +if [ "$HAVE_IMAGE" == "" ]; then + autotest/debian-latest/prep.sh + if [ "$?" -ne 0 ]; then + exit 1 + fi +fi +docker image rm zchunk-debian:test -f 2>/dev/null 1>/dev/null +docker image build -t zchunk-debian:test --file autotest/debian-latest/build/Dockerfile ./ + diff --git a/autotest/debian-latest/build/Dockerfile b/autotest/debian-latest/build/Dockerfile new file mode 100644 index 0000000..73dac8d --- /dev/null +++ b/autotest/debian-latest/build/Dockerfile @@ -0,0 +1,6 @@ +FROM zchunk-debian:latest +ADD ./ /code +WORKDIR /code +RUN meson build && cd build && ninja +WORKDIR /code/build +CMD ninja test diff --git a/autotest/debian-latest/prep.sh b/autotest/debian-latest/prep.sh new file mode 100755 index 0000000..b0a0ec8 --- /dev/null +++ b/autotest/debian-latest/prep.sh @@ -0,0 +1,7 @@ +#!/bin/sh +docker pull debian:latest +if [ "$?" -ne 0 ]; then + exit 1 +fi +docker image rm -f zchunk-debian:latest 2>/dev/null 1>/dev/null +docker image build -t zchunk-debian:latest --file autotest/debian-latest/prep/Dockerfile ./ diff --git a/autotest/debian-latest/prep/Dockerfile b/autotest/debian-latest/prep/Dockerfile new file mode 100644 index 0000000..14f5373 --- /dev/null +++ b/autotest/debian-latest/prep/Dockerfile @@ -0,0 +1,2 @@ +FROM debian:latest +RUN /bin/bash -c 'apt-get update && export DEBIAN_FRONTEND=noninteractive && apt-get -yq install meson libzstd-dev && apt-get -yq install gcc pkg-config libcurl4-openssl-dev libssl-dev' diff --git a/autotest/debian-latest/test.sh b/autotest/debian-latest/test.sh new file mode 100755 index 0000000..4bc1ab4 --- /dev/null +++ b/autotest/debian-latest/test.sh @@ -0,0 +1,15 @@ +#!/bin/sh +# Build zchunk-debian:latest if it doesn't exist +HAVE_IMAGE=$(docker image ls -q zchunk-debian:test) +if [ "$HAVE_IMAGE" == "" ]; then + autotest/debian-latest/build.sh + if [ "$?" -ne 0 ]; then + exit 1 + fi +fi +docker rm zchunk-debian-test -f 2>/dev/null 1>/dev/null +docker run --name zchunk-debian-test zchunk-debian:test +RETVAL=$? +docker rm zchunk-debian-test -f 2>/dev/null 1>/dev/null +docker image rm zchunk-debian:test -f 2>/dev/null 1>/dev/null +exit $RETVAL diff --git a/autotest/fedora-latest/build.sh b/autotest/fedora-latest/build.sh new file mode 100755 index 0000000..d988967 --- /dev/null +++ b/autotest/fedora-latest/build.sh @@ -0,0 +1,12 @@ +#!/bin/sh +# Build zchunk-fedora:latest if it doesn't exist +HAVE_IMAGE=$(docker image ls -q zchunk-fedora:latest) +if [ "$HAVE_IMAGE" == "" ]; then + autotest/fedora-latest/prep.sh + if [ "$?" -ne 0 ]; then + exit 1 + fi +fi +docker image rm zchunk-fedora:test -f 2>/dev/null 1>/dev/null +docker image build -t zchunk-fedora:test --file autotest/fedora-latest/build/Dockerfile ./ + diff --git a/autotest/fedora-latest/build/Dockerfile b/autotest/fedora-latest/build/Dockerfile new file mode 100644 index 0000000..902f3ad --- /dev/null +++ b/autotest/fedora-latest/build/Dockerfile @@ -0,0 +1,6 @@ +FROM zchunk-fedora:latest +ADD ./ /code +WORKDIR /code +RUN meson build && cd build && ninja +WORKDIR /code/build +CMD ninja test diff --git a/autotest/fedora-latest/prep.sh b/autotest/fedora-latest/prep.sh new file mode 100755 index 0000000..9095923 --- /dev/null +++ b/autotest/fedora-latest/prep.sh @@ -0,0 +1,7 @@ +#!/bin/sh +docker pull fedora:latest +if [ "$?" -ne 0 ]; then + exit 1 +fi +docker image rm -f zchunk-fedora:latest 2>/dev/null 1>/dev/null +docker image build -t zchunk-fedora:latest --file autotest/fedora-latest/prep/Dockerfile ./ diff --git a/autotest/fedora-latest/prep/Dockerfile b/autotest/fedora-latest/prep/Dockerfile new file mode 100644 index 0000000..4e7944d --- /dev/null +++ b/autotest/fedora-latest/prep/Dockerfile @@ -0,0 +1,2 @@ +FROM fedora:latest +RUN dnf -y install meson gcc "pkgconfig(libzstd)" "pkgconfig(libcurl)" "pkgconfig(openssl)" && rm -rf /var/cache/dnf diff --git a/autotest/fedora-latest/test.sh b/autotest/fedora-latest/test.sh new file mode 100755 index 0000000..3673dcf --- /dev/null +++ b/autotest/fedora-latest/test.sh @@ -0,0 +1,15 @@ +#!/bin/sh +# Build zchunk-fedora:latest if it doesn't exist +HAVE_IMAGE=$(docker image ls -q zchunk-fedora:test) +if [ "$HAVE_IMAGE" == "" ]; then + autotest/fedora-latest/build.sh + if [ "$?" -ne 0 ]; then + exit 1 + fi +fi +docker rm zchunk-fedora-test -f 2>/dev/null 1>/dev/null +docker run --name zchunk-fedora-test zchunk-fedora:test +RETVAL=$? +docker rm zchunk-fedora-test -f 2>/dev/null 1>/dev/null +docker image rm zchunk-fedora:test -f 2>/dev/null 1>/dev/null +exit $RETVAL diff --git a/autotest/opensuse-leap/build.sh b/autotest/opensuse-leap/build.sh new file mode 100755 index 0000000..c1bf612 --- /dev/null +++ b/autotest/opensuse-leap/build.sh @@ -0,0 +1,12 @@ +#!/bin/sh +# Build zchunk-opensuse:latest if it doesn't exist +HAVE_IMAGE=$(docker image ls -q zchunk-opensuse:latest) +if [ "$HAVE_IMAGE" == "" ]; then + autotest/opensuse-leap/prep.sh + if [ "$?" -ne 0 ]; then + exit 1 + fi +fi +docker image rm zchunk-opensuse:test -f 2>/dev/null 1>/dev/null +docker image build -t zchunk-opensuse:test --file autotest/opensuse-leap/build/Dockerfile ./ + diff --git a/autotest/opensuse-leap/build/Dockerfile b/autotest/opensuse-leap/build/Dockerfile new file mode 100644 index 0000000..157b2c5 --- /dev/null +++ b/autotest/opensuse-leap/build/Dockerfile @@ -0,0 +1,6 @@ +FROM zchunk-opensuse:latest +ADD ./ /code +WORKDIR /code +RUN meson build && cd build && ninja +WORKDIR /code/build +CMD ninja test diff --git a/autotest/opensuse-leap/prep.sh b/autotest/opensuse-leap/prep.sh new file mode 100755 index 0000000..f1a0c89 --- /dev/null +++ b/autotest/opensuse-leap/prep.sh @@ -0,0 +1,7 @@ +#!/bin/sh +docker pull opensuse/leap +if [ "$?" -ne 0 ]; then + exit 1 +fi +docker image rm -f zchunk-opensuse:latest 2>/dev/null 1>/dev/null +docker image build -t zchunk-opensuse:latest --file autotest/opensuse-leap/prep/Dockerfile ./ diff --git a/autotest/opensuse-leap/prep/Dockerfile b/autotest/opensuse-leap/prep/Dockerfile new file mode 100644 index 0000000..9b66e9a --- /dev/null +++ b/autotest/opensuse-leap/prep/Dockerfile @@ -0,0 +1,2 @@ +FROM opensuse/leap +RUN zypper --non-interactive install meson gcc pkgconfig "pkgconfig(libzstd)" "pkgconfig(libcurl)" "pkgconfig(openssl)" && rm -rf /var/cache/zypp diff --git a/autotest/opensuse-leap/test.sh b/autotest/opensuse-leap/test.sh new file mode 100755 index 0000000..93fdb4f --- /dev/null +++ b/autotest/opensuse-leap/test.sh @@ -0,0 +1,15 @@ +#!/bin/sh +# Build zchunk-opensuse:latest if it doesn't exist +HAVE_IMAGE=$(docker image ls -q zchunk-opensuse:test) +if [ "$HAVE_IMAGE" == "" ]; then + autotest/opensuse-leap/build.sh + if [ "$?" -ne 0 ]; then + exit 1 + fi +fi +docker rm zchunk-opensuse-test -f 2>/dev/null 1>/dev/null +docker run --name zchunk-opensuse-test zchunk-opensuse:test +RETVAL=$? +docker rm zchunk-opensuse-test -f 2>/dev/null 1>/dev/null +docker image rm zchunk-opensuse:test -f 2>/dev/null 1>/dev/null +exit $RETVAL diff --git a/autotest/ubuntu-rolling/build.sh b/autotest/ubuntu-rolling/build.sh new file mode 100755 index 0000000..a484200 --- /dev/null +++ b/autotest/ubuntu-rolling/build.sh @@ -0,0 +1,12 @@ +#!/bin/sh +# Build zchunk-ubuntu:latest if it doesn't exist +HAVE_IMAGE=$(docker image ls -q zchunk-ubuntu:latest) +if [ "$HAVE_IMAGE" == "" ]; then + autotest/ubuntu-rolling/prep.sh + if [ "$?" -ne 0 ]; then + exit 1 + fi +fi +docker image rm zchunk-ubuntu:test -f 2>/dev/null 1>/dev/null +docker image build -t zchunk-ubuntu:test --file autotest/ubuntu-rolling/build/Dockerfile ./ + diff --git a/autotest/ubuntu-rolling/build/Dockerfile b/autotest/ubuntu-rolling/build/Dockerfile new file mode 100644 index 0000000..f460fe9 --- /dev/null +++ b/autotest/ubuntu-rolling/build/Dockerfile @@ -0,0 +1,6 @@ +FROM zchunk-ubuntu:latest +ADD ./ /code +WORKDIR /code +RUN meson build && cd build && ninja +WORKDIR /code/build +CMD ninja test diff --git a/autotest/ubuntu-rolling/prep.sh b/autotest/ubuntu-rolling/prep.sh new file mode 100755 index 0000000..79ae5bb --- /dev/null +++ b/autotest/ubuntu-rolling/prep.sh @@ -0,0 +1,7 @@ +#!/bin/sh +docker pull ubuntu:rolling +if [ "$?" -ne 0 ]; then + exit 1 +fi +docker image rm -f zchunk-ubuntu:latest 2>/dev/null 1>/dev/null +docker image build -t zchunk-ubuntu:latest --file autotest/ubuntu-rolling/prep/Dockerfile ./ diff --git a/autotest/ubuntu-rolling/prep/Dockerfile b/autotest/ubuntu-rolling/prep/Dockerfile new file mode 100644 index 0000000..aab1775 --- /dev/null +++ b/autotest/ubuntu-rolling/prep/Dockerfile @@ -0,0 +1,2 @@ +FROM ubuntu:rolling +RUN /bin/bash -c 'apt-get update && export DEBIAN_FRONTEND=noninteractive && apt-get -yq install meson gcc pkg-config libzstd-dev libcurl4-openssl-dev libssl-dev' diff --git a/autotest/ubuntu-rolling/test.sh b/autotest/ubuntu-rolling/test.sh new file mode 100755 index 0000000..b2345b3 --- /dev/null +++ b/autotest/ubuntu-rolling/test.sh @@ -0,0 +1,15 @@ +#!/bin/sh +# Build zchunk-ubuntu:latest if it doesn't exist +HAVE_IMAGE=$(docker image ls -q zchunk-ubuntu:test) +if [ "$HAVE_IMAGE" == "" ]; then + autotest/ubuntu-rolling/build.sh + if [ "$?" -ne 0 ]; then + exit 1 + fi +fi +docker rm zchunk-ubuntu-test -f 2>/dev/null 1>/dev/null +docker run --name zchunk-ubuntu-test zchunk-ubuntu:test +RETVAL=$? +docker rm zchunk-ubuntu-test -f 2>/dev/null 1>/dev/null +docker image rm zchunk-ubuntu:test -f 2>/dev/null 1>/dev/null +exit $RETVAL diff --git a/contrib/gen_xml_dictionary b/contrib/gen_xml_dictionary new file mode 100755 index 0000000..057c36a --- /dev/null +++ b/contrib/gen_xml_dictionary @@ -0,0 +1,47 @@ +#!/usr/bin/python3 + +import re +import sys, os, os.path, subprocess +import argparse, tempfile, shutil + +parser = argparse.ArgumentParser(description="Creates a zstd dictionary from a file that will be chunked") +parser.add_argument("split_string", help="String to use to split the file(s)") +parser.add_argument("file", nargs="+", help="File(s) to use to generate the dictionary") +parser.add_argument("-s", "--size", action="store", type=int, default=112640, help="Dictionary size") +args = parser.parse_args() + +temp_dir = tempfile.mkdtemp() + +# Match any series of hex numbers that are 32 bytes or longer +checksum_regex = re.compile("[0-9a-f]{32,}") +try: + dict_file = os.path.basename(args.file[0]).split(".")[0] + ".dict" +except KeyError: + dict_file = os.path.basename(args.file[0]) + ".dict" + +# Split file into chunks and store them in a temporary directory +for fn in args.file: + f = open(fn, 'r') + data = f.read() + f.close() + data = checksum_regex.sub("", data) + data_list = data.split(args.split_string) + count = 0 + for data in data_list: + filename = "%s/%s.%06i" % (temp_dir, os.path.basename(fn), count) + f = open(filename, 'w') + f.write(args.split_string) + f.write(data) + f.close() + count += 1 + +# Create dictionary from chunks in the temporary directory +filelist = os.listdir(temp_dir) +filelist = ["%s/%s" % (temp_dir, f) for f in filelist] +run_cmd = ["zstd", "--train"] + filelist + ["-o", dict_file, "--maxdict=%i" % args.size] +try: + subprocess.run(run_cmd) + shutil.rmtree(temp_dir) +except subprocess.CalledProcessError: + shutil.rmtree(temp_dir) + sys.exit(1) diff --git a/doc/unzck.1 b/doc/unzck.1 new file mode 100644 index 0000000..b12d76e --- /dev/null +++ b/doc/unzck.1 @@ -0,0 +1,103 @@ +.\" Copyright (c) 2020 Peter Pentchev +.\" All rights reserved. +.\" +.\" Redistribution and use in source and binary forms, with or without +.\" modification, are permitted provided that the following conditions are met: +.\" +.\" 1. Redistributions of source code must retain the above copyright notice, +.\" this list of conditions and the following disclaimer. +.\" +.\" 2. Redistributions in binary form must reproduce the above copyright notice, +.\" this list of conditions and the following disclaimer in the documentation +.\" and/or other materials provided with the distribution. +.\" +.\" THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" +.\" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE +.\" IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE +.\" ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE +.\" LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR +.\" CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF +.\" SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS +.\" INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN +.\" CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) +.\" ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE +.\" POSSIBILITY OF SUCH DAMAGE. +.\" +.Dd May 31, 2020 +.Dt UNZCK 1 +.Os +.Sh NAME +.Nm unzck +.Nd decompress a file in the zchunk format +.Sh SYNOPSIS +.Nm +.Op Fl c | Fl -stdout +.Op Fl -dict +.Op Fl v | Fl -verbose +.Ar file +.Nm +.Fl ? | Fl -help +.Nm +.Fl -usage +.Nm +.Fl -version +.Sh DESCRIPTION +The +.Nm +utility extracts the original file from a zchunk-compressed one. +.Pp +.Em NOTE: +The +.Nm +utility will place the new file without the +.Pa .zck +extension in the +.Em current +working directory, not in the directory where the original file resides. +.Pp +The +.Nm +utility accepts the following optional arguments: +.Pp +.Bl -tag -width indent +.It Fl c , Fl -stdout +Extract the data to the standard output stream, do not write it to a file. +.It Fl -dict +Only extract the zstd compression dictionary. +.It Fl v , Fl -verbose +Verbose operation; display some diagnostic output. +.It Fl ? , Fl -help +Display program usage information and exit. +.It Fl -usage +Display brief program usage information and exit. +.It Fl -version +Display program version information and exit. +.El +.Sh EXIT STATUS +.Ex -std +.Sh EXAMPLES +Create (in the current directory) an uncompressed +.Pa words +file from a compressed one: +.Pp +.Dl unzck /mnt/xfer/words.zck +.Pp +Do not create the +.Pa words +file, but send the contents to the standard output stream: +.Pp +.Dl unzck -c /mnt/xfer/words.zck +.Pp +.Sh SEE ALSO +.Xr zck 1 , +.Xr zck_delta_size 1 , +.Xr zck_gen_zdict 1 , +.Xr zck_read_header 1 , +.Xr zckdl 1 +.Sh AUTHOR +The +.Nm +utility was written by +.An Jonathan Dieter Aq jdieter@gmail.com . +This manual page stub was written by +.An Peter Pentchev Aq roam@ringlet.net . diff --git a/doc/zck.1 b/doc/zck.1 new file mode 100644 index 0000000..6b965be --- /dev/null +++ b/doc/zck.1 @@ -0,0 +1,110 @@ +.\" Copyright (c) 2020 Peter Pentchev +.\" All rights reserved. +.\" +.\" Redistribution and use in source and binary forms, with or without +.\" modification, are permitted provided that the following conditions are met: +.\" +.\" 1. Redistributions of source code must retain the above copyright notice, +.\" this list of conditions and the following disclaimer. +.\" +.\" 2. Redistributions in binary form must reproduce the above copyright notice, +.\" this list of conditions and the following disclaimer in the documentation +.\" and/or other materials provided with the distribution. +.\" +.\" THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" +.\" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE +.\" IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE +.\" ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE +.\" LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR +.\" CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF +.\" SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS +.\" INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN +.\" CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) +.\" ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE +.\" POSSIBILITY OF SUCH DAMAGE. +.\" +.Dd May 31, 2020 +.Dt ZCK 1 +.Os +.Sh NAME +.Nm zck +.Nd compress a file using the zchunk format +.Sh SYNOPSIS +.Nm +.Op Fl D Ar file | Fl -dict Ns = Ns Ar file +.Op Fl m Ar chunk | Fl -manual Ns = Ns Ar chunk +.Op Fl o Ar file | Fl -output Ns = Ns Ar file +.Op Fl s Ar string | Fl -split Ns = Ns Ar string +.Op Fl v | Fl -verbose +.Ar file +.Nm +.Fl ? | Fl -help | Fl -usage | Fl -version +.Sh DESCRIPTION +The +.Nm +utility creates a new zchunk file from the data in the specified input file. +.Pp +.Em NOTE: +If no output file is specified using the +.Fl o +option, the +.Nm +utility will place the new file with the +.Pa .zck +extension in the +.Em current +working directory, not in the directory where the original file resides. +.Pp +The +.Nm +utility accepts the following optional arguments: +.Pp +.Bl -tag -width indent +.It Fl D , Fl -dict +Set the zstd compression dictionary to the specified file. +.It Fl m , Fl -manual +Do not do any automatic chunking (implies +.Fl s ) . +.It Fl o , Fl -output +Output to the specified file. +.It Fl s , Fl -split +Split chunks at the beginning of the specified string. +.It Fl v , Fl -verbose +Verbose operation; display some diagnostic output. +.It Fl ? , Fl -help +Display program usage information and exit. +.It Fl -usage +Display brief program usage information and exit. +.It Fl -version +Display program version information and exit. +.El +.Sh EXIT STATUS +.Ex -std +.Sh EXAMPLES +Create (in the current directory) a zchunk-compressed +.Pa words.zck +file from a dictionary: +.Pp +.Dl zck /usr/share/dict/words +.Pp +The same, but specify an output file: +.Pp +.Dl zck -o /tmp/words.txt.zck /usr/share/dict/words +.Pp +Generate a zchunk file with chunks separated on HTML sections: +.Pp +.Dl zck -s '

' doc.html +.Pp +.Sh SEE ALSO +.Xr unzck 1 , +.Xr zck_delta_size 1 , +.Xr zck_gen_zdict 1 , +.Xr zck_read_header 1 , +.Xr zckdl 1 +.Sh AUTHOR +The +.Nm +utility was written by +.An Jonathan Dieter Aq jdieter@gmail.com . +This manual page stub was written by +.An Peter Pentchev Aq roam@ringlet.net . diff --git a/doc/zck_delta_size.1 b/doc/zck_delta_size.1 new file mode 100644 index 0000000..585c82c --- /dev/null +++ b/doc/zck_delta_size.1 @@ -0,0 +1,89 @@ +.\" Copyright (c) 2020 Peter Pentchev +.\" All rights reserved. +.\" +.\" Redistribution and use in source and binary forms, with or without +.\" modification, are permitted provided that the following conditions are met: +.\" +.\" 1. Redistributions of source code must retain the above copyright notice, +.\" this list of conditions and the following disclaimer. +.\" +.\" 2. Redistributions in binary form must reproduce the above copyright notice, +.\" this list of conditions and the following disclaimer in the documentation +.\" and/or other materials provided with the distribution. +.\" +.\" THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" +.\" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE +.\" IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE +.\" ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE +.\" LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR +.\" CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF +.\" SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS +.\" INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN +.\" CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) +.\" ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE +.\" POSSIBILITY OF SUCH DAMAGE. +.\" +.Dd May 31, 2020 +.Dt ZCK_DELTA_SIZE 1 +.Os +.Sh NAME +.Nm zck_delta_size +.Nd calculate the differences between two zchunk files +.Sh SYNOPSIS +.Nm +.Op Fl v | Fl -verbose +.Ar file1 +.Ar file2 +.Nm +.Fl ? | Fl -help | Fl -usage | Fl -version +.Sh DESCRIPTION +The +.Nm +utility examines two zchunk compressed files and determines how similar +they are: how many chunks are the same between the files, so that tools +like e.g. +.Xr rsync 1 +or +.Xr zckdl 1 +could only transfer the small parts that differ instead of the full files. +This is especially useful for structured files that have been compressed +using the +.Xr zck 1 +tool's +.Fl s Po Fl -split Pc +option. +.Pp +The +.Nm +utility accepts the following optional arguments: +.Pp +.Bl -tag -width indent +.It Fl v , Fl -verbose +Verbose operation; display some diagnostic output. +.It Fl ? , Fl -help +Display program usage information and exit. +.It Fl -usage +Display brief program usage information and exit. +.It Fl -version +Display program version information and exit. +.El +.Sh EXIT STATUS +.Ex -std +.Sh EXAMPLES +Examine two zchunk files: +.Pp +.Dl zck_delta_size doc1.txt.zck doc2.txt.zck +.Pp +.Sh SEE ALSO +.Xr unzck 1 , +.Xr zck 1 , +.Xr zck_gen_zdict 1 , +.Xr zck_read_header 1 , +.Xr zckdl 1 +.Sh AUTHOR +The +.Nm +utility was written by +.An Jonathan Dieter Aq jdieter@gmail.com . +This manual page stub was written by +.An Peter Pentchev Aq roam@ringlet.net . diff --git a/doc/zck_gen_zdict.1 b/doc/zck_gen_zdict.1 new file mode 100644 index 0000000..f21625a --- /dev/null +++ b/doc/zck_gen_zdict.1 @@ -0,0 +1,92 @@ +.\" Copyright (c) 2020 Peter Pentchev +.\" All rights reserved. +.\" +.\" Redistribution and use in source and binary forms, with or without +.\" modification, are permitted provided that the following conditions are met: +.\" +.\" 1. Redistributions of source code must retain the above copyright notice, +.\" this list of conditions and the following disclaimer. +.\" +.\" 2. Redistributions in binary form must reproduce the above copyright notice, +.\" this list of conditions and the following disclaimer in the documentation +.\" and/or other materials provided with the distribution. +.\" +.\" THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" +.\" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE +.\" IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE +.\" ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE +.\" LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR +.\" CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF +.\" SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS +.\" INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN +.\" CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) +.\" ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE +.\" POSSIBILITY OF SUCH DAMAGE. +.\" +.Dd May 31, 2020 +.Dt ZCK_GEN_ZDICT 1 +.Os +.Sh NAME +.Nm zck_gen_zdict +.Nd extract a dictionary and optionally the separate chunks from a zdict file +.Sh SYNOPSIS +.Nm +.Op Fl d Ar directory | Fl -dir Ns = Ns Ar directory +.Op Fl v | Fl -verbose +.Ar file +.Nm +.Fl ? | Fl -help | Fl -usage | Fl -version +.Sh DESCRIPTION +The +.Nm +utility reads the specified zchunk file, extracts the dictionary used +during the compression, and optionally uncompresses the individual chunks +into the specified directory. +.Pp +The +.Nm +utility accepts the following optional arguments: +.Pp +.Bl -tag -width indent +.It Fl d , Fl -dir +In addition to extracting the dictionary, uncompress the individual chunks +as sequential files into the specified directory. +.It Fl v , Fl -verbose +Verbose operation; display some diagnostic output. +.It Fl ? , Fl -help +Display program usage information and exit. +.It Fl -usage +Display brief program usage information and exit. +.It Fl -version +Display program version information and exit. +.El +.Sh EXIT STATUS +.Ex -std +.Sh EXAMPLES +Extract a zchunk file's dictionary into the +.Pa words.txt.zdict +file: +.Pp +.Dl zck_gen_zdict words.txt.zck +.Pp +Extract the dictionary into +.Pa words.txt.zdict +and also the chunks into the +.Pa chunks/ +directory: +.Pp +.Dl zck_gen_zdict -d chunks/ words.txt.zck +.Pp +.Sh SEE ALSO +.Xr unzck 1 , +.Xr zck 1 , +.Xr zck_delta_size 1 , +.Xr zck_read_header 1 , +.Xr zckdl 1 +.Sh AUTHOR +The +.Nm +utility was written by +.An Jonathan Dieter Aq jdieter@gmail.com . +This manual page stub was written by +.An Peter Pentchev Aq roam@ringlet.net . diff --git a/doc/zck_read_header.1 b/doc/zck_read_header.1 new file mode 100644 index 0000000..5e58958 --- /dev/null +++ b/doc/zck_read_header.1 @@ -0,0 +1,87 @@ +.\" Copyright (c) 2020 Peter Pentchev +.\" All rights reserved. +.\" +.\" Redistribution and use in source and binary forms, with or without +.\" modification, are permitted provided that the following conditions are met: +.\" +.\" 1. Redistributions of source code must retain the above copyright notice, +.\" this list of conditions and the following disclaimer. +.\" +.\" 2. Redistributions in binary form must reproduce the above copyright notice, +.\" this list of conditions and the following disclaimer in the documentation +.\" and/or other materials provided with the distribution. +.\" +.\" THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" +.\" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE +.\" IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE +.\" ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE +.\" LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR +.\" CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF +.\" SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS +.\" INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN +.\" CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) +.\" ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE +.\" POSSIBILITY OF SUCH DAMAGE. +.\" +.Dd May 31, 2020 +.Dt ZCK_READ_HEADER 1 +.Os +.Sh NAME +.Nm zck_read_header +.Nd display information from the header of a zchunk file +.Sh SYNOPSIS +.Nm +.Op Fl c | Fl -show-chunks +.Op Fl f | Fl -verify +.Op Fl q | Fl -quiet +.Op Fl v | Fl -verbose +.Ar file +.Nm +.Fl ? | Fl -help | Fl -usage | Fl -version +.Sh DESCRIPTION +The +.Nm +utility reads a zchunk file's header and displays some of the information +recorded there. +.Pp +The +.Nm +utility accepts the following optional arguments: +.Pp +.Bl -tag -width indent +.It Fl c , Fl -show-chunks +Display information about the individual chunks, too. +.It Fl f , Fl -verify +Instead of only reading the zchunk file's header, read the whole file and +verify its integrity. +.It Fl q , Fl -quiet +Quiet operation; only display error messages. +.It Fl v , Fl -verbose +Verbose operation; display some diagnostic output. +.It Fl ? , Fl -help +Display program usage information and exit. +.It Fl -usage +Display brief program usage information and exit. +.It Fl -version +Display program version information and exit. +.El +.Sh EXIT STATUS +.Ex -std +.Sh EXAMPLES +Examine a zchunk file's header: +.Pp +.Dl zck_delta_size doc.txt.zck +.Pp +.Sh SEE ALSO +.Xr unzck 1 , +.Xr zck 1 , +.Xr zck_delta_size 1 , +.Xr zck_gen_zdict 1 , +.Xr zckdl 1 +.Sh AUTHOR +The +.Nm +utility was written by +.An Jonathan Dieter Aq jdieter@gmail.com . +This manual page stub was written by +.An Peter Pentchev Aq roam@ringlet.net . diff --git a/doc/zckdl.1 b/doc/zckdl.1 new file mode 100644 index 0000000..daae059 --- /dev/null +++ b/doc/zckdl.1 @@ -0,0 +1,90 @@ +.\" Copyright (c) 2020 Peter Pentchev +.\" All rights reserved. +.\" +.\" Redistribution and use in source and binary forms, with or without +.\" modification, are permitted provided that the following conditions are met: +.\" +.\" 1. Redistributions of source code must retain the above copyright notice, +.\" this list of conditions and the following disclaimer. +.\" +.\" 2. Redistributions in binary form must reproduce the above copyright notice, +.\" this list of conditions and the following disclaimer in the documentation +.\" and/or other materials provided with the distribution. +.\" +.\" THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" +.\" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE +.\" IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE +.\" ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE +.\" LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR +.\" CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF +.\" SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS +.\" INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN +.\" CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) +.\" ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE +.\" POSSIBILITY OF SUCH DAMAGE. +.\" +.Dd May 31, 2020 +.Dt ZCKDL 1 +.Os +.Sh NAME +.Nm zckdl +.Nd download a zchunk file +.Sh SYNOPSIS +.Nm +.Op Fl -fail-no-ranges +.Op Fl q | Fl -quiet +.Op Fl s Ar file | Fl -source Ns = Ns Ar file +.Op Fl v | Fl -verbose +.Ar url +.Nm +.Fl ? | Fl -help | Fl -usage | Fl -version +.Sh DESCRIPTION +The +.Nm +utility attempts to download a zchunk file in an optimized way, +taking into consideration the chunked structure. +.Pp +The +.Nm +utility accepts the following optional arguments: +.Pp +.Bl -tag -width indent +.It Fl -fail-no-ranges +If the server does not support ranges, fail instead of downloading +the whole file. +.It Fl q | Fl -quiet +Quiet operation; only display warning and error messages. +If specified twice, only display error messages. +.It Fl s | Fl -source +Specify the file to use as a source with the premise that most of +the chunks in the downloaded file will be the same. +.It Fl v , Fl -verbose +Verbose operation; display some diagnostic output. +.It Fl ? , Fl -help +Display program usage information and exit. +.It Fl -usage +Display brief program usage information and exit. +.It Fl -version +Display program version information and exit. +.El +.Sh EXIT STATUS +.Ex -std +.Sh EXAMPLES +Download a zchunk file that is hopefully not much different from +the previous version: +.Pp +.Dl zckdl -s doc1.txt.zck https://example.com/doc2.txt.zck +.Pp +.Sh SEE ALSO +.Xr unzck 1 , +.Xr zck 1 , +.Xr zck_delta_size 1 , +.Xr zck_gen_zdict 1 , +.Xr zck_read_header 1 +.Sh AUTHOR +The +.Nm +utility was written by +.An Jonathan Dieter Aq jdieter@gmail.com . +This manual page stub was written by +.An Peter Pentchev Aq roam@ringlet.net . diff --git a/include/meson.build b/include/meson.build new file mode 100644 index 0000000..833c86e --- /dev/null +++ b/include/meson.build @@ -0,0 +1,5 @@ +confdata = configuration_data() +confdata.set('version', meson.project_version()) +install_headers(configure_file(input: 'zck.h.in', + output: 'zck.h', + configuration: confdata)) diff --git a/include/zck.h.in b/include/zck.h.in new file mode 100644 index 0000000..b847576 --- /dev/null +++ b/include/zck.h.in @@ -0,0 +1,373 @@ +#ifndef ZCK_H +#define ZCK_H + +#define ZCK_VERSION "@version@" + +#include +#include +#include + +typedef enum zck_hash { + ZCK_HASH_SHA1, + ZCK_HASH_SHA256, + ZCK_HASH_SHA512, + ZCK_HASH_SHA512_128, + ZCK_HASH_UNKNOWN +} zck_hash; + +typedef enum zck_comp { + ZCK_COMP_NONE, + ZCK_COMP_GZIP, /* Not implemented yet */ + ZCK_COMP_ZSTD +} zck_comp; + +typedef enum zck_ioption { + ZCK_HASH_FULL_TYPE = 0, /* Set full file hash type, using zck_hash */ + ZCK_HASH_CHUNK_TYPE, /* Set chunk hash type using zck_hash */ + ZCK_VAL_HEADER_HASH_TYPE, /* Set what the header hash type *should* be */ + ZCK_VAL_HEADER_LENGTH, /* Set what the header length *should* be */ + ZCK_COMP_TYPE = 100, /* Set compression type using zck_comp */ + ZCK_MANUAL_CHUNK, /* Disable auto-chunking */ + ZCK_CHUNK_MIN, /* Minimum chunk size when manual chunking */ + ZCK_CHUNK_MAX, /* Maximum chunk size when manual chunking */ + ZCK_ZSTD_COMP_LEVEL = 1000 /* Set zstd compression level */ +} zck_ioption; + +typedef enum zck_soption { + ZCK_VAL_HEADER_DIGEST = 0, /* Set what the header hash *should* be */ + ZCK_COMP_DICT = 100 /* Set compression dictionary */ +} zck_soption; + +typedef enum zck_log_type { + ZCK_LOG_DDEBUG = -1, + ZCK_LOG_DEBUG, + ZCK_LOG_INFO, + ZCK_LOG_WARNING, + ZCK_LOG_ERROR, + ZCK_LOG_NONE +} zck_log_type; + +typedef struct zckCtx zckCtx; +typedef struct zckHash zckHash; +typedef struct zckChunk zckChunk; +typedef struct zckIndex zckIndex; +typedef struct zckRange zckRange; +typedef struct zckDL zckDL; + +typedef size_t (*zck_wcb)(void *ptr, size_t l, size_t c, void *dl_v); + +/******************************************************************* + * Reading a zchunk file + *******************************************************************/ +/* Initialize zchunk context */ +zckCtx *zck_create() + __attribute__ ((warn_unused_result)); +/* Initialize zchunk for reading */ +bool zck_init_read (zckCtx *zck, int src_fd) + __attribute__ ((warn_unused_result)); +/* Decompress dst_size bytes from zchunk file to dst, while verifying hashes */ +ssize_t zck_read(zckCtx *zck, char *dst, size_t dst_size) + __attribute__ ((warn_unused_result)); + + +/******************************************************************* + * Writing a zchunk file + *******************************************************************/ +/* Initialize zchunk for writing */ +bool zck_init_write (zckCtx *zck, int dst_fd) + __attribute__ ((warn_unused_result)); +/* Compress data src of size src_size, and write to zchunk file + * Due to the nature of zchunk files and how they are built, no data will + * actually appear in the zchunk file until zck_close() is called */ +ssize_t zck_write(zckCtx *zck, const char *src, const size_t src_size) + __attribute__ ((warn_unused_result)); +/* Create a chunk boundary */ +ssize_t zck_end_chunk(zckCtx *zck) + __attribute__ ((warn_unused_result)); + + +/******************************************************************* + * Common functions for finishing a zchunk file + *******************************************************************/ +/* Close a zchunk file so it may no longer be read from or written to. The + * context still contains information about the file */ +bool zck_close(zckCtx *zck) + __attribute__ ((warn_unused_result)); +/* Free a zchunk context. You must pass the address of the context, and the + * context will automatically be set to NULL after it is freed */ +void zck_free(zckCtx **zck); + + +/******************************************************************* + * Options + *******************************************************************/ +/* Set string option */ +bool zck_set_soption(zckCtx *zck, zck_soption option, const char *value, + size_t length) + __attribute__ ((warn_unused_result)); +/* Set integer option */ +bool zck_set_ioption(zckCtx *zck, zck_ioption option, ssize_t value) + __attribute__ ((warn_unused_result)); + + +/******************************************************************* + * Error handling + *******************************************************************/ +/* Set logging level */ +void zck_set_log_level(zck_log_type ll); +/* Set logging fd */ +void zck_set_log_fd(int fd); +/* Check whether zck is in error state + * Returns 0 if not, 1 if recoverable error, 2 if fatal error */ +int zck_is_error(zckCtx *zck) + __attribute__ ((warn_unused_result)); +/* Get error message + * Returns char* containing error message. char* will contain empty string if + * there is no error message */ +const char *zck_get_error(zckCtx *zck); +/* Clear error message + * Returns 1 if message was cleared, 0 if error is fatal and can't be cleared */ +bool zck_clear_error(zckCtx *zck); + +/******************************************************************* + * Miscellaneous utilities + *******************************************************************/ +/* Validate the chunk and data checksums for the current file. + * Returns 0 for error, -1 for invalid checksum and 1 for valid checksum */ +int zck_validate_checksums(zckCtx *zck) + __attribute__ ((warn_unused_result)); +/* Validate just the data checksum for the current file + * Returns 0 for error, -1 for invalid checksum and 1 for valid checksum */ +int zck_validate_data_checksum(zckCtx *zck) + __attribute__ ((warn_unused_result)); +/* Go through file and mark valid chunks as valid + * Returns 0 for error, -1 for invalid checksum and 1 for valid checksum */ +int zck_find_valid_chunks(zckCtx *zck) + __attribute__ ((warn_unused_result)); + +/* Get a zckRange of ranges that need to still be downloaded. + * max_ranges is the maximum number of ranges supported in a single request + * by the server. If the server supports unlimited ranges, set this to -1 + * Returns NULL if there's an error */ +zckRange *zck_get_missing_range(zckCtx *zck, int max_ranges) + __attribute__ ((warn_unused_result)); +/* Get a string representation of a zckRange */ +char *zck_get_range_char(zckCtx *zck, zckRange *range) + __attribute__ ((warn_unused_result)); +/* Get file descriptor attached to zchunk context */ +int zck_get_fd(zckCtx *zck) + __attribute__ ((warn_unused_result)); +/* Set file descriptor attached to zchunk context */ +bool zck_set_fd(zckCtx *zck, int fd) + __attribute__ ((warn_unused_result)); + +/* Return number of missing chunks (-1 if error) */ +int zck_missing_chunks(zckCtx *zck) + __attribute__ ((warn_unused_result)); +/* Return number of failed chunks (-1 if error) */ +int zck_failed_chunks(zckCtx *zck) + __attribute__ ((warn_unused_result)); +/* Reset failed chunks to become missing */ +void zck_reset_failed_chunks(zckCtx *zck); + + +/******************************************************************* + * The functions should be all you need to read and write a zchunk + * file. After this point are advanced functions with an unstable + * API, so use them with care. + *******************************************************************/ + + +/******************************************************************* + * Advanced miscellaneous zchunk functions + *******************************************************************/ +/* Get lead length */ +ssize_t zck_get_lead_length(zckCtx *zck) + __attribute__ ((warn_unused_result)); +/* Get header length (lead + preface + index + sigs) */ +ssize_t zck_get_header_length(zckCtx *zck) + __attribute__ ((warn_unused_result)); +/* Get data length */ +ssize_t zck_get_data_length(zckCtx *zck) + __attribute__ ((warn_unused_result)); +/* Get file length */ +ssize_t zck_get_length(zckCtx *zck) + __attribute__ ((warn_unused_result)); +/* Get index digest */ +char *zck_get_header_digest(zckCtx *zck) + __attribute__ ((warn_unused_result)); +/* Get data digest */ +char *zck_get_data_digest(zckCtx *zck) + __attribute__ ((warn_unused_result)); + + +/******************************************************************* + * Advanced compression functions + *******************************************************************/ +/* Get name of compression type */ +const char *zck_comp_name_from_type(int comp_type) + __attribute__ ((warn_unused_result)); +/* Initialize compression. Compression type and parameters *must* be done + * before this is called */ + + +/******************************************************************* + * Advanced zchunk reading functions + *******************************************************************/ +/* Initialize zchunk for reading using advanced options */ +bool zck_init_adv_read (zckCtx *zck, int src_fd) + __attribute__ ((warn_unused_result)); +/* Read zchunk lead */ +bool zck_read_lead(zckCtx *zck) + __attribute__ ((warn_unused_result)); +/* Read zchunk header */ +bool zck_read_header(zckCtx *zck) + __attribute__ ((warn_unused_result)); +/* Validate lead */ +bool zck_validate_lead(zckCtx *zck) + __attribute__ ((warn_unused_result)); + +/******************************************************************* + * Indexes + *******************************************************************/ +/* Get chunk count */ +ssize_t zck_get_chunk_count(zckCtx *zck) + __attribute__ ((warn_unused_result)); +/* Get chunk by number */ +zckChunk *zck_get_chunk(zckCtx *zck, size_t number) + __attribute__ ((warn_unused_result)); +/* Get first chunk */ +zckChunk *zck_get_first_chunk(zckCtx *zck) + __attribute__ ((warn_unused_result)); +/* Get next chunk */ +zckChunk *zck_get_next_chunk(zckChunk *idx) + __attribute__ ((warn_unused_result)); +/* Get chunk starting location */ +ssize_t zck_get_chunk_start(zckChunk *idx) + __attribute__ ((warn_unused_result)); +/* Get uncompressed chunk size */ +ssize_t zck_get_chunk_size(zckChunk *idx) + __attribute__ ((warn_unused_result)); +/* Get compressed chunk size */ +ssize_t zck_get_chunk_comp_size(zckChunk *idx) + __attribute__ ((warn_unused_result)); +/* Get chunk number */ +ssize_t zck_get_chunk_number(zckChunk *idx) + __attribute__ ((warn_unused_result)); +/* Get validity of current chunk - 1 = valid, 0 = missing, -1 = invalid */ +int zck_get_chunk_valid(zckChunk *idx) + __attribute__ ((warn_unused_result)); +/* Get chunk digest */ +char *zck_get_chunk_digest(zckChunk *item) + __attribute__ ((warn_unused_result)); +/* Get digest size of chunk hash type */ +ssize_t zck_get_chunk_digest_size(zckCtx *zck) + __attribute__ ((warn_unused_result)); +/* Get chunk data */ +ssize_t zck_get_chunk_data(zckChunk *idx, char *dst, size_t dst_size) + __attribute__ ((warn_unused_result)); +/* Get compressed chunk data */ +ssize_t zck_get_chunk_comp_data(zckChunk *idx, char *dst, size_t dst_size) + __attribute__ ((warn_unused_result)); +/* Find out if two chunk digests are the same */ +bool zck_compare_chunk_digest(zckChunk *a, zckChunk *b) + __attribute__ ((warn_unused_result)); + + +/******************************************************************* + * Advanced hash functions + *******************************************************************/ +/* Get overall hash type */ +int zck_get_full_hash_type(zckCtx *zck) + __attribute__ ((warn_unused_result)); +/* Get digest size of overall hash type */ +ssize_t zck_get_full_digest_size(zckCtx *zck) + __attribute__ ((warn_unused_result)); +/* Get chunk hash type */ +int zck_get_chunk_hash_type(zckCtx *zck) + __attribute__ ((warn_unused_result)); +/* Get name of hash type */ +const char *zck_hash_name_from_type(int hash_type) + __attribute__ ((warn_unused_result)); + + + +/******************************************************************* + * Downloading (should this go in a separate header and library?) + *******************************************************************/ + +/******************************************************************* + * Ranges + *******************************************************************/ +/* Get any matching chunks from src and put them in the right place in tgt */ +bool zck_copy_chunks(zckCtx *src, zckCtx *tgt) + __attribute__ ((warn_unused_result)); +/* Free zckRange */ +void zck_range_free(zckRange **info); +/* Get range string from start and end location */ +char *zck_get_range(size_t start, size_t end) + __attribute__ ((warn_unused_result)); +/* Get the minimum size needed to download in order to know how large the header + * is */ +int zck_get_min_download_size() + __attribute__ ((warn_unused_result)); +/* Get the number of separate range items in the range */ +int zck_get_range_count(zckRange *range) + __attribute__ ((warn_unused_result)); + +/******************************************************************* + * Downloading + *******************************************************************/ +/* Initialize zchunk download context */ +zckDL *zck_dl_init(zckCtx *zck) + __attribute__ ((warn_unused_result)); +/* Reset zchunk download context for reuse */ +void zck_dl_reset(zckDL *dl); +/* Free zchunk download context */ +void zck_dl_free(zckDL **dl); +/* Get zchunk context from download context */ +zckCtx *zck_dl_get_zck(zckDL *dl) + __attribute__ ((warn_unused_result)); +/* Set zchunk context in download context */ +bool zck_dl_set_zck(zckDL *dl, zckCtx *zck) + __attribute__ ((warn_unused_result)); +/* Clear regex used for extracting download ranges from multipart download */ +void zck_dl_clear_regex(zckDL *dl); +/* Download and process the header from url */ +bool zck_dl_get_header(zckCtx *zck, zckDL *dl, char *url) + __attribute__ ((warn_unused_result)); +/* Get number of bytes downloaded using download context */ +ssize_t zck_dl_get_bytes_downloaded(zckDL *dl) + __attribute__ ((warn_unused_result)); +/* Get number of bytes uploaded using download context */ +ssize_t zck_dl_get_bytes_uploaded(zckDL *dl) + __attribute__ ((warn_unused_result)); +/* Set download ranges for zchunk download context */ +bool zck_dl_set_range(zckDL *dl, zckRange *range) + __attribute__ ((warn_unused_result)); +/* Get download ranges from zchunk download context */ +zckRange *zck_dl_get_range(zckDL *dl) + __attribute__ ((warn_unused_result)); + +/* Set header callback function */ +bool zck_dl_set_header_cb(zckDL *dl, zck_wcb func) + __attribute__ ((warn_unused_result)); +/* Set header userdata */ +bool zck_dl_set_header_data(zckDL *dl, void *data) + __attribute__ ((warn_unused_result)); +/* Set write callback function */ +bool zck_dl_set_write_cb(zckDL *dl, zck_wcb func) + __attribute__ ((warn_unused_result)); +/* Set write userdata */ +bool zck_dl_set_write_data(zckDL *dl, void *data) + __attribute__ ((warn_unused_result)); + +/* Write callback. You *must* pass this and your initialized zchunk download + * context to the downloader when downloading a zchunk file. If you have your + * own callback, set dl->write_cb to your callback and dl->wdata to your + * callback data. */ +size_t zck_write_chunk_cb(void *ptr, size_t l, size_t c, void *dl_v); +size_t zck_write_zck_header_cb(void *ptr, size_t l, size_t c, void *dl_v); +size_t zck_header_cb(char *b, size_t l, size_t c, void *dl_v); + +#endif diff --git a/meson.build b/meson.build new file mode 100644 index 0000000..558a99d --- /dev/null +++ b/meson.build @@ -0,0 +1,70 @@ +project( + 'zck', 'c', + version : '1.1.7', + meson_version : '>=0.44.0', + default_options : ['c_std=gnu99'] +) + +so_version = '1' + +common_cflags = [ + '-Wunused-result', +] +cc = meson.get_compiler('c') +add_project_arguments(cc.get_supported_arguments(common_cflags), language : 'c') + +if build_machine.system() == 'freebsd' + add_project_arguments('-DFREEBSD', language : 'c') +endif + +if get_option('with-zstd') == 'disabled' + zstd_dep = dependency('', required : false) +else + zstd_dep = dependency('libzstd', required : get_option('with-zstd') == 'enabled') + if zstd_dep.found() + add_project_arguments('-DZCHUNK_ZSTD', language : 'c') + endif +endif + +curl_dep = dependency('libcurl') + +if build_machine.system() == 'freebsd' or not cc.links('#include \nstatic error_t parse_opt (int key, char *arg, struct argp_state *state) { argp_usage(state); }; void main() {}') + argplib = cc.find_library('argp') +else + argplib = dependency('', required : false) +endif + +if get_option('with-openssl') == 'disabled' + openssl_dep = dependency('', required : false) +else + openssl_dep = dependency('openssl', required : get_option('with-openssl') == 'enabled') + if openssl_dep.found() + add_project_arguments('-DZCHUNK_OPENSSL', language : 'c') + endif +endif + +inc = include_directories('include') + +subdir('include') +subdir('src') +if not get_option('coverity') + subdir('test') +endif + +pkg_mod = import('pkgconfig') +pkg_mod.generate( + libraries : zcklib, + version : meson.project_version(), + name : 'libzck', + filebase : 'zck', + description : 'A library for generating easy-to-delta files.' +) + +install_man([ + 'doc/unzck.1', + 'doc/zck.1', + 'doc/zck_delta_size.1', + 'doc/zck_gen_zdict.1', + 'doc/zck_read_header.1', + 'doc/zckdl.1', +]) diff --git a/meson_options.txt b/meson_options.txt new file mode 100644 index 0000000..7dc221e --- /dev/null +++ b/meson_options.txt @@ -0,0 +1,3 @@ +option('with-zstd', type : 'combo', choices : ['enabled', 'disabled', 'auto'], value : 'auto') +option('with-openssl', type : 'combo', choices : ['enabled', 'disabled', 'auto'], value : 'auto') +option('coverity', type : 'boolean', value : false) diff --git a/prep-Jenkinsfile b/prep-Jenkinsfile new file mode 100644 index 0000000..f47fe5d --- /dev/null +++ b/prep-Jenkinsfile @@ -0,0 +1,11 @@ +node { + checkout scm + stage('Prep') { + sh "./autotest/fedora-latest/prep.sh" + sh "./autotest/centos-7/prep.sh" + sh "./autotest/opensuse-leap/prep.sh" + sh "./autotest/alpine-edge/prep.sh" + sh "./autotest/debian-latest/prep.sh" + sh "./autotest/ubuntu-rolling/prep.sh" + } +} diff --git a/src/lib/buzhash/LICENSE b/src/lib/buzhash/LICENSE new file mode 100644 index 0000000..ef6bdaf --- /dev/null +++ b/src/lib/buzhash/LICENSE @@ -0,0 +1,19 @@ +Copyright (c) 2015, the urlblock developers. + +Permission is hereby granted, free of charge, to any person obtaining a copy +of this software and associated documentation files (the "Software"), to deal +in the Software without restriction, including without limitation the rights +to use, copy, modify, merge, publish, distribute, sublicense, and/or sell +copies of the Software, and to permit persons to whom the Software is +furnished to do so, subject to the following conditions: + +The above copyright notice and this permission notice shall be included in +all copies or substantial portions of the Software. + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, +OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN +THE SOFTWARE. diff --git a/src/lib/buzhash/buzhash.c b/src/lib/buzhash/buzhash.c new file mode 100644 index 0000000..780febd --- /dev/null +++ b/src/lib/buzhash/buzhash.c @@ -0,0 +1,136 @@ +/* + * Copyright (c) 2015, the urlblock developers. + * Copyright (c) 2018 Jonathan Dieter + * + * Permission is hereby granted, free of charge, to any person obtaining a copy + * of this software and associated documentation files (the "Software"), to deal + * in the Software without restriction, including without limitation the rights + * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell + * copies of the Software, and to permit persons to whom the Software is + * furnished to do so, subject to the following conditions: + * + * The above copyright notice and this permission notice shall be included in + * all copies or substantial portions of the Software. + * + * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR + * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, + * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE + * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER + * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, + * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN + * THE SOFTWARE. + */ + +#include "buzhash.h" + +#include +#include + +static uint32_t rol32(uint32_t v, uint32_t s) { + s %= 32; + if(s == 0) + return v; + return ((v << s) | (v >> (32 - s))); +} + +const uint32_t buzhash_table[] = { + 0x458be752, 0xc10748cc, 0xfbbcdbb8, 0x6ded5b68, + 0xb10a82b5, 0x20d75648, 0xdfc5665f, 0xa8428801, + 0x7ebf5191, 0x841135c7, 0x65cc53b3, 0x280a597c, + 0x16f60255, 0xc78cbc3e, 0x294415f5, 0xb938d494, + 0xec85c4e6, 0xb7d33edc, 0xe549b544, 0xfdeda5aa, + 0x882bf287, 0x3116737c, 0x05569956, 0xe8cc1f68, + 0x0806ac5e, 0x22a14443, 0x15297e10, 0x50d090e7, + 0x4ba60f6f, 0xefd9f1a7, 0x5c5c885c, 0x82482f93, + 0x9bfd7c64, 0x0b3e7276, 0xf2688e77, 0x8fad8abc, + 0xb0509568, 0xf1ada29f, 0xa53efdfe, 0xcb2b1d00, + 0xf2a9e986, 0x6463432b, 0x95094051, 0x5a223ad2, + 0x9be8401b, 0x61e579cb, 0x1a556a14, 0x5840fdc2, + 0x9261ddf6, 0xcde002bb, 0x52432bb0, 0xbf17373e, + 0x7b7c222f, 0x2955ed16, 0x9f10ca59, 0xe840c4c9, + 0xccabd806, 0x14543f34, 0x1462417a, 0x0d4a1f9c, + 0x087ed925, 0xd7f8f24c, 0x7338c425, 0xcf86c8f5, + 0xb19165cd, 0x9891c393, 0x325384ac, 0x0308459d, + 0x86141d7e, 0xc922116a, 0xe2ffa6b6, 0x53f52aed, + 0x2cd86197, 0xf5b9f498, 0xbf319c8f, 0xe0411fae, + 0x977eb18c, 0xd8770976, 0x9833466a, 0xc674df7f, + 0x8c297d45, 0x8ca48d26, 0xc49ed8e2, 0x7344f874, + 0x556f79c7, 0x6b25eaed, 0xa03e2b42, 0xf68f66a4, + 0x8e8b09a2, 0xf2e0e62a, 0x0d3a9806, 0x9729e493, + 0x8c72b0fc, 0x160b94f6, 0x450e4d3d, 0x7a320e85, + 0xbef8f0e1, 0x21d73653, 0x4e3d977a, 0x1e7b3929, + 0x1cc6c719, 0xbe478d53, 0x8d752809, 0xe6d8c2c6, + 0x275f0892, 0xc8acc273, 0x4cc21580, 0xecc4a617, + 0xf5f7be70, 0xe795248a, 0x375a2fe9, 0x425570b6, + 0x8898dcf8, 0xdc2d97c4, 0x0106114b, 0x364dc22f, + 0x1e0cad1f, 0xbe63803c, 0x5f69fac2, 0x4d5afa6f, + 0x1bc0dfb5, 0xfb273589, 0x0ea47f7b, 0x3c1c2b50, + 0x21b2a932, 0x6b1223fd, 0x2fe706a8, 0xf9bd6ce2, + 0xa268e64e, 0xe987f486, 0x3eacf563, 0x1ca2018c, + 0x65e18228, 0x2207360a, 0x57cf1715, 0x34c37d2b, + 0x1f8f3cde, 0x93b657cf, 0x31a019fd, 0xe69eb729, + 0x8bca7b9b, 0x4c9d5bed, 0x277ebeaf, 0xe0d8f8ae, + 0xd150821c, 0x31381871, 0xafc3f1b0, 0x927db328, + 0xe95effac, 0x305a47bd, 0x426ba35b, 0x1233af3f, + 0x686a5b83, 0x50e072e5, 0xd9d3bb2a, 0x8befc475, + 0x487f0de6, 0xc88dff89, 0xbd664d5e, 0x971b5d18, + 0x63b14847, 0xd7d3c1ce, 0x7f583cf3, 0x72cbcb09, + 0xc0d0a81c, 0x7fa3429b, 0xe9158a1b, 0x225ea19a, + 0xd8ca9ea3, 0xc763b282, 0xbb0c6341, 0x020b8293, + 0xd4cd299d, 0x58cfa7f8, 0x91b4ee53, 0x37e4d140, + 0x95ec764c, 0x30f76b06, 0x5ee68d24, 0x679c8661, + 0xa41979c2, 0xf2b61284, 0x4fac1475, 0x0adb49f9, + 0x19727a23, 0x15a7e374, 0xc43a18d5, 0x3fb1aa73, + 0x342fc615, 0x924c0793, 0xbee2d7f0, 0x8a279de9, + 0x4aa2d70c, 0xe24dd37f, 0xbe862c0b, 0x177c22c2, + 0x5388e5ee, 0xcd8a7510, 0xf901b4fd, 0xdbc13dbc, + 0x6c0bae5b, 0x64efe8c7, 0x48b02079, 0x80331a49, + 0xca3d8ae6, 0xf3546190, 0xfed7108b, 0xc49b941b, + 0x32baf4a9, 0xeb833a4a, 0x88a3f1a5, 0x3a91ce0a, + 0x3cc27da1, 0x7112e684, 0x4a3096b1, 0x3794574c, + 0xa3c8b6f3, 0x1d213941, 0x6e0a2e00, 0x233479f1, + 0x0f4cd82f, 0x6093edd2, 0x5d7d209e, 0x464fe319, + 0xd4dcac9e, 0x0db845cb, 0xfb5e4bc3, 0xe0256ce1, + 0x09fb4ed1, 0x0914be1e, 0xa5bdb2c3, 0xc6eb57bb, + 0x30320350, 0x3f397e91, 0xa67791bc, 0x86bc0e2c, + 0xefa0a7e2, 0xe9ff7543, 0xe733612c, 0xd185897b, + 0x329e5388, 0x91dd236b, 0x2ecb0d93, 0xf4d82a3d, + 0x35b5c03f, 0xe4e606f0, 0x05b21843, 0x37b45964, + 0x5eff22f4, 0x6027f4cc, 0x77178b3c, 0xae507131, + 0x7bf7cabc, 0xf9c18d66, 0x593ade65, 0xd95ddf11, +}; + +uint32_t buzhash_update (buzHash *b, const char *s, size_t window) { + if(b->window == NULL || b->window_size != window) { + if(b->window) + free(b->window); + b->window = calloc(1, window); + assert(b->window); + b->window_loc = 0; + b->window_fill = 0; + b->window_size = window; + b->h = 0; + } + if(b->window_fill < b->window_size) { + b->window[b->window_fill] = *s; + b->window_fill++; + if(b->window_fill < b->window_size) { + b->h ^= rol32 (buzhash_table[(uint8_t) (*s)], window - b->window_fill); + return 1; + } else { + b->h ^= buzhash_table[(uint8_t) (*s)]; + return b->h; + } + } + b->h = rol32 (b->h, 1) ^ + rol32 (buzhash_table[(uint8_t) b->window[b->window_loc]], b->window_size) ^ + buzhash_table[(uint8_t) *s]; + b->window[b->window_loc++] = *s; + b->window_loc %= b->window_size; + return b->h; +} + +void buzhash_reset (buzHash *b) { + free(b->window); + b->window = NULL; +} diff --git a/src/lib/buzhash/buzhash.h b/src/lib/buzhash/buzhash.h new file mode 100644 index 0000000..06f6917 --- /dev/null +++ b/src/lib/buzhash/buzhash.h @@ -0,0 +1,19 @@ +#ifndef URLBLOCK_BUZHASH_H +#define URLBLOCK_BUZHASH_H + +#include +#include +#include + +typedef struct buzHash { + uint32_t h; + int window_size; + char *window; + int window_loc; + int window_fill; +} buzHash; + +uint32_t buzhash_update (buzHash *b, const char *s, size_t window); +void buzhash_reset (buzHash *b); + +#endif diff --git a/src/lib/buzhash/meson.build b/src/lib/buzhash/meson.build new file mode 100644 index 0000000..e3a1917 --- /dev/null +++ b/src/lib/buzhash/meson.build @@ -0,0 +1 @@ +lib_sources += files('buzhash.c') diff --git a/src/lib/comp/comp.c b/src/lib/comp/comp.c new file mode 100644 index 0000000..89b3301 --- /dev/null +++ b/src/lib/comp/comp.c @@ -0,0 +1,729 @@ +/* + * Copyright 2018 Jonathan Dieter + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions are met: + * + * 1. Redistributions of source code must retain the above copyright notice, + * this list of conditions and the following disclaimer. + * + * 2. Redistributions in binary form must reproduce the above copyright notice, + * this list of conditions and the following disclaimer in the documentation + * and/or other materials provided with the distribution. + * + * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" + * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE + * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE + * ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE + * LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR + * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF + * SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS + * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN + * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) + * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE + * POSSIBILITY OF SUCH DAMAGE. + */ + +#include +#include +#include +#include +#include +#include +#include + +#include "zck_private.h" +#include "comp/nocomp/nocomp.h" +#ifdef ZCHUNK_ZSTD +#include "comp/zstd/zstd.h" +#endif + +#define BLK_SIZE 32768 + +static char unknown[] = "Unknown(\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0"; + +const static char *COMP_NAME[] = { + "no", + "Unknown (1)", + "zstd" +}; + +static void update_buzhash_bits(zckCtx *zck) { + int s=1; + for(int i=0; ibuzhash_match_bits; i++) + s *= 2; + s -= 1; + zck->buzhash_bitmask = s; +} + +static bool set_comp_type(zckCtx *zck, ssize_t type) { + VALIDATE_BOOL(zck); + + zckComp *comp = &(zck->comp); + + /* Cannot change compression type after compression has started */ + if(comp->started) { + set_error(zck, "Unable to set compression type after initialization"); + return false; + } + + /* Set all values to 0 before setting compression type */ + char *dc_data = comp->dc_data; + size_t dc_data_loc = comp->dc_data_loc; + size_t dc_data_size = comp->dc_data_size; + memset(comp, 0, sizeof(zckComp)); + comp->dc_data = dc_data; + comp->dc_data_loc = dc_data_loc; + comp->dc_data_size = dc_data_size; + + zck_log(ZCK_LOG_DEBUG, "Setting compression to %s", + zck_comp_name_from_type(type)); + if(type == ZCK_COMP_NONE) { + return nocomp_setup(zck, comp); +#ifdef ZCHUNK_ZSTD + } else if(type == ZCK_COMP_ZSTD) { + return zstd_setup(zck, comp); +#endif + } else { + set_error(zck, "Unsupported compression type: %s", + zck_comp_name_from_type(type)); + return false; + } + return true; +} + +static size_t comp_read_from_dc(zckCtx *zck, zckComp *comp, char *dst, + size_t dst_size) { + VALIDATE_INT(zck); + ALLOCD_INT(zck, comp); + ALLOCD_INT(zck, dst); + + size_t dl_size = dst_size; + if(dl_size > comp->dc_data_size - comp->dc_data_loc) + dl_size = comp->dc_data_size - comp->dc_data_loc; + memcpy(dst, comp->dc_data+comp->dc_data_loc, dl_size); + comp->dc_data_loc += dl_size; + if(dl_size > 0) + zck_log(ZCK_LOG_DEBUG, "Reading %lu bytes from decompressed buffer", + dl_size); + return dl_size; +} + +static bool comp_add_to_data(zckCtx *zck, zckComp *comp, const char *src, + size_t src_size) { + VALIDATE_BOOL(zck); + ALLOCD_BOOL(zck, comp); + ALLOCD_BOOL(zck, src); + + comp->data = zrealloc(comp->data, comp->data_size + src_size); + zck_log(ZCK_LOG_DEBUG, "Adding %lu bytes to compressed buffer", + src_size); + memcpy(comp->data + comp->data_size, src, src_size); + comp->data_size += src_size; + comp->data_loc += src_size; + return true; +} + +static ssize_t comp_end_dchunk(zckCtx *zck, bool use_dict, size_t fd_size) { + VALIDATE_READ_INT(zck); + + ssize_t rb = zck->comp.end_dchunk(zck, &(zck->comp), use_dict, fd_size); + if(validate_current_chunk(zck) < 1) + return -1; + zck->comp.data_loc = 0; + zck->comp.data_idx = zck->comp.data_idx->next; + if(!hash_init(zck, &(zck->check_chunk_hash), &(zck->chunk_hash_type))) + return -1; + return rb; +} + +static ssize_t comp_write(zckCtx *zck, const char *src, const size_t src_size) { + VALIDATE_WRITE_INT(zck); + + if(src_size == 0) + return 0; + + char *dst = NULL; + size_t dst_size = 0; + if(zck->comp.compress(zck, &(zck->comp), src, src_size, &dst, + &dst_size, 1) < 0) + return -1; + zck->comp.dc_data_size += src_size; + + if(dst_size > 0 && !write_data(zck, zck->temp_fd, dst, dst_size)) { + free(dst); + return -1; + } + if(!index_add_to_chunk(zck, dst, dst_size, src_size)) { + free(dst); + return -1; + } + free(dst); + return src_size; +} + +bool comp_init(zckCtx *zck) { + VALIDATE_BOOL(zck); + + zckComp *comp = &(zck->comp); + + if(zck->comp.started) { + set_error(zck, "Compression already initialized"); + return false; + } + if((zck->comp.dict && zck->comp.dict_size == 0) || + (zck->comp.dict == NULL && zck->comp.dict_size > 0)) { + set_error(zck, "Invalid dictionary configuration"); + return false; + } + zck_log(ZCK_LOG_DEBUG, "Initializing %s compression", + zck_comp_name_from_type(comp->type)); + if(!zck->comp.init(zck, &(zck->comp))) + return false; + if(zck->mode == ZCK_MODE_WRITE) { + if(zck->chunk_min_size == 0) { + zck->chunk_min_size = CHUNK_DEFAULT_MIN; + zck_log(ZCK_LOG_DEBUG, "Using default minimum chunk size of %lu", + zck->chunk_min_size); + } + if(zck->chunk_max_size == 0) { + zck->chunk_max_size = CHUNK_DEFAULT_MAX; + zck_log(ZCK_LOG_DEBUG, "Using default maximum chunk size of %lu", + zck->chunk_max_size); + } + if(zck->manual_chunk == 0) { + zck_log(ZCK_LOG_DEBUG, "Using buzhash algorithm for chunking"); + zck->buzhash_width = DEFAULT_BUZHASH_WIDTH; + zck->buzhash_match_bits = DEFAULT_BUZHASH_BITS; + update_buzhash_bits(zck); + zck_log(ZCK_LOG_DEBUG, "Setting average chunk size to %lu", + zck->buzhash_bitmask + 1); + zck->chunk_auto_min = (zck->buzhash_bitmask + 1) / 4; + if(zck->chunk_auto_min < zck->chunk_min_size) + zck->chunk_auto_min = zck->chunk_min_size; + zck_log(ZCK_LOG_DEBUG, "Setting automatic minimum chunk size to %lu", + zck->chunk_auto_min); + zck->chunk_auto_max = (zck->buzhash_bitmask + 1) * 4; + if(zck->chunk_auto_max > zck->chunk_max_size) + zck->chunk_auto_max = zck->chunk_max_size; + zck_log(ZCK_LOG_DEBUG, "Setting automatic maximum chunk size to %lu", + zck->chunk_auto_max); + } + } + + if(zck->temp_fd) { + if(zck->comp.dict) { + char *dst = NULL; + size_t dst_size = 0; + + if(zck->comp.compress(zck, comp, zck->comp.dict, + zck->comp.dict_size, &dst, &dst_size, 0) < 0) + return false; + zck->comp.dc_data_size = zck->comp.dict_size; + if(!write_data(zck, zck->temp_fd, dst, dst_size)) { + free(dst); + return false; + } + if(!index_add_to_chunk(zck, dst, dst_size, + zck->comp.dict_size)) { + free(dst); + return false; + } + free(dst); + dst = NULL; + dst_size = 0; + + if(!zck->comp.end_cchunk(zck, comp, &dst, &dst_size, 0)) + return false; + zck->comp.dc_data_size = 0; + if(!write_data(zck, zck->temp_fd, dst, dst_size)) { + free(dst); + return false; + } + if(!index_add_to_chunk(zck, dst, dst_size, 0) || + !index_finish_chunk(zck)) { + free(dst); + return false; + } + free(dst); + } else { + if(!index_finish_chunk(zck)) + return false; + } + } + zck->comp.started = true; + return true; +} + +bool comp_reset(zckCtx *zck) { + ALLOCD_BOOL(zck, zck); + + zck->comp.started = 0; + if(zck->comp.dc_data) { + free(zck->comp.dc_data); + zck->comp.dc_data = NULL; + zck->comp.dc_data_loc = 0; + zck->comp.dc_data_size = 0; + } + if(zck->comp.close == NULL) + return true; + return zck->comp.close(zck, &(zck->comp)); +} + +bool comp_reset_comp_data(zckCtx *zck) { + ALLOCD_BOOL(zck, zck); + + if(zck->comp.data) { + free(zck->comp.data); + zck->comp.data = NULL; + zck->comp.data_size = 0; + zck->comp.data_loc = 0; + zck->comp.data_idx = NULL; + } + return true; +} + +bool comp_close(zckCtx *zck) { + ALLOCD_BOOL(zck, zck); + + zck_log(ZCK_LOG_DEBUG, "Closing compression"); + comp_reset_comp_data(zck); + if(zck->comp.dict) + free(zck->comp.dict); + zck->comp.dict = NULL; + zck->comp.dict_size = 0; + + return comp_reset(zck); +} + +bool comp_ioption(zckCtx *zck, zck_ioption option, ssize_t value) { + VALIDATE_BOOL(zck); + + /* Cannot change compression parameters after compression has started */ + if(zck && zck->comp.started) { + set_error(zck, + "Unable to set compression parameters after initialization"); + return false; + } + if(option == ZCK_COMP_TYPE) { + return set_comp_type(zck, value); + + /* Manual chunking */ + } else if(option == ZCK_MANUAL_CHUNK) { + VALIDATE_WRITE_BOOL(zck); + if(value != 0) { + zck_log(ZCK_LOG_DEBUG, "Disabling automatic chunking"); + zck->manual_chunk = 1; + } else { + zck_log(ZCK_LOG_DEBUG, "Enabling automatic chunking"); + zck->manual_chunk = 0; + } + return true; + + /* Minimum chunk size */ + } else if(option == ZCK_CHUNK_MIN) { + VALIDATE_WRITE_BOOL(zck); + if(value < 1) { + set_error(zck, "Minimum chunk size must be > 0"); + return false; + } + if(value > zck->chunk_max_size) { + set_error(zck, "Minimum chunk size must be <= maximum chunk size"); + return false; + } + zck->chunk_min_size = value; + zck_log(ZCK_LOG_DEBUG, "Setting minimum chunk size to %li", value); + return true; + + /* Maximum chunk size */ + } else if(option == ZCK_CHUNK_MAX) { + VALIDATE_WRITE_BOOL(zck); + if(value < 1) { + set_error(zck, "Maximum chunk size must be > 0"); + return false; + } + if(value < zck->chunk_min_size) { + set_error(zck, "Maximum chunk size must be >= minimum chunk size"); + return false; + } + zck->chunk_max_size = value; + zck_log(ZCK_LOG_DEBUG, "Setting maximum chunk size to %li", value); + return true; + + } else { + if(zck && zck->comp.set_parameter) + return zck->comp.set_parameter(zck, &(zck->comp), option, &value); + + set_error(zck, "Unsupported compression parameter: %i", + option); + return false; + } + return true; +} + +bool comp_soption(zckCtx *zck, zck_soption option, const void *value, + size_t length) { + VALIDATE_BOOL(zck); + + /* Cannot change compression parameters after compression has started */ + if(zck && zck->comp.started) { + set_error(zck, + "Unable to set compression parameters after initialization"); + return false; + } + if(option == ZCK_COMP_DICT) { + zck->comp.dict = (char *)value; + zck->comp.dict_size = length; + } else { + if(zck && zck->comp.set_parameter) + return zck->comp.set_parameter(zck, &(zck->comp), option, value); + + set_error(zck, "Unsupported compression parameter: %i", option); + return false; + } + return true; +} + +bool comp_add_to_dc(zckCtx *zck, zckComp *comp, const char *src, + size_t src_size) { + VALIDATE_BOOL(zck); + ALLOCD_BOOL(zck, comp); + ALLOCD_BOOL(zck, src); + + /* Get rid of any already read data and allocate space for new data */ + char *temp = zmalloc(comp->dc_data_size - comp->dc_data_loc + src_size); + if(comp->dc_data_loc != 0) + zck_log(ZCK_LOG_DEBUG, "Freeing %lu bytes from decompressed buffer", + comp->dc_data_loc); + zck_log(ZCK_LOG_DEBUG, "Adding %lu bytes to decompressed buffer", + src_size); + memcpy(temp, comp->dc_data + comp->dc_data_loc, + comp->dc_data_size - comp->dc_data_loc); + free(comp->dc_data); + comp->dc_data_size -= comp->dc_data_loc; + comp->dc_data_loc = 0; + comp->dc_data = temp; + + /* Copy new uncompressed data into comp */ + memcpy(comp->dc_data + comp->dc_data_size, src, src_size); + comp->dc_data_size += src_size; + return true; +} + +ssize_t comp_read(zckCtx *zck, char *dst, size_t dst_size, bool use_dict) { + VALIDATE_READ_INT(zck); + + if(!zck->comp.started) { + set_error(zck, "Compression hasn't been initialized yet"); + return -1; + } + + if(dst_size == 0) + return 0; + + /* Read dictionary if it exists and hasn't been read yet */ + if(use_dict && zck->index.first->length > 0 && zck->comp.dict == NULL && + !import_dict(zck)) + return -1; + + size_t dc = 0; + char *src = zmalloc(dst_size - dc); + bool finished_rd = false; + bool finished_dc = false; + zck_log(ZCK_LOG_DEBUG, "Trying to read %lu bytes", dst_size); + while(dc < dst_size) { + /* Get bytes from decompressed buffer */ + ssize_t rb = comp_read_from_dc(zck, &(zck->comp), dst+dc, dst_size-dc); + if(rb < 0) + goto read_error; + dc += rb; + if(dc == dst_size) + break; + if(rb > 0) + continue; + if(finished_dc || zck->comp.data_eof) + break; + + /* Decompress compressed buffer into decompressed buffer */ + size_t dc_data_size = zck->comp.dc_data_size; + size_t dc_data_loc = zck->comp.dc_data_loc; + if(zck->comp.data_size > 0 && + !zck->comp.decompress(zck, &(zck->comp), use_dict)) + goto read_error; + + /* Check whether we decompressed more data */ + if(zck->comp.dc_data_size != dc_data_size || + zck->comp.dc_data_loc != dc_data_loc) + continue; + + /* End decompression chunk if we're on a chunk boundary */ + if(zck->comp.data_idx == NULL) { + zck->comp.data_idx = zck->index.first; + /* Skip first chunk if it's an empty dict */ + if(zck->comp.data_idx->comp_length == 0) + zck->comp.data_idx = zck->comp.data_idx->next; + if(!hash_init(zck, &(zck->check_chunk_hash), + &(zck->chunk_hash_type))) + goto hash_error; + if(zck->comp.data_loc > 0) { + if(!hash_update(zck, &(zck->check_full_hash), zck->comp.data, + zck->comp.data_loc)) + goto hash_error; + if(!hash_update(zck, &(zck->check_chunk_hash), zck->comp.data, + zck->comp.data_loc)) + goto hash_error; + } + if(zck->comp.data_idx == NULL) { + free(src); + return 0; + } + } + if(zck->comp.data_loc == zck->comp.data_idx->comp_length) { + if(!comp_end_dchunk(zck, use_dict, zck->comp.data_idx->length)) { + free(src); + return -1; + } + if(zck->comp.data_idx == NULL) + zck->comp.data_eof = true; + continue; + } + + /* If we finished reading and we've reached here, we're done + * decompressing */ + if(finished_rd) { + finished_dc = true; + continue; + } + + /* Make sure we don't read beyond current chunk length */ + size_t rs = dst_size; + if(zck->comp.data_loc + rs > zck->comp.data_idx->comp_length) + rs = zck->comp.data_idx->comp_length - zck->comp.data_loc; + + /* Decompressed buffer is empty, so read data from file and fill + * compressed buffer */ + rb = read_data(zck, src, rs); + if(rb < 0) + goto read_error; + if(rb < rs) { + zck_log(ZCK_LOG_DDEBUG, "EOF"); + finished_rd = true; + } + if(zck->check_chunk_hash.ctx == NULL) + if(!hash_init(zck, &(zck->check_chunk_hash), + &(zck->chunk_hash_type))) + goto hash_error; + if(!hash_update(zck, &(zck->check_full_hash), src, rb) || + !hash_update(zck, &(zck->check_chunk_hash), src, rb) || + !comp_add_to_data(zck, &(zck->comp), src, rb)) + goto read_error; + } + free(src); + return dc; +read_error: + free(src); + return -1; +hash_error: + free(src); + return -2; +} + +const char PUBLIC *zck_comp_name_from_type(int comp_type) { + if(comp_type > 2) { + snprintf(unknown+8, 21, "%i)", comp_type); + return unknown; + } + return COMP_NAME[comp_type]; +} + +ssize_t PUBLIC zck_write(zckCtx *zck, const char *src, const size_t src_size) { + VALIDATE_WRITE_INT(zck); + + zck_log(ZCK_LOG_DDEBUG, "Starting up"); + + if(src_size == 0) + return 0; + + if(!zck->comp.started && !comp_init(zck)) + return -1; + + zck_log(ZCK_LOG_DDEBUG, "Starting up"); + + const char *loc = src; + size_t loc_size = src_size; + size_t loc_written = 0; + + if(zck->manual_chunk) { + while(zck->comp.dc_data_size + loc_size > zck->chunk_max_size) { + loc_written = zck->chunk_max_size - zck->comp.dc_data_size; + if(comp_write(zck, loc, loc_written) != loc_written) + return -1; + loc_size -= loc_written; + loc += loc_written; + zck_log(ZCK_LOG_DDEBUG, + "Chunk has reached maximum size, forcing a new chunk"); + if(zck_end_chunk(zck) < 0) + return -1; + } + if(comp_write(zck, loc, loc_size) != loc_size) + return -1; + else + return src_size; + } else { + for(size_t i=0; ibuzhash), loc+i, zck->buzhash_width) & + zck->buzhash_bitmask) == 0 || + zck->comp.dc_data_size + i >= zck->chunk_auto_max) { + if(comp_write(zck, loc, i) != i) + return -1; + loc += i; + loc_size -= i; + i = 0; + if(zck->comp.dc_data_size >= zck->chunk_max_size) + zck_log(ZCK_LOG_DDEBUG, + "Chunk has reached maximum size, forcing a new " + "chunk"); + else + zck_log(ZCK_LOG_DDEBUG, "Automatically ending chunk"); + if(zck->comp.dc_data_size < zck->chunk_auto_min) { + zck_log(ZCK_LOG_DDEBUG, + "Chunk too small, refusing to end chunk"); + continue; + } + if(zck_end_chunk(zck) < 0) + return -1; + } else { + i++; + } + } + if(loc_size > 0 && comp_write(zck, loc, loc_size) != loc_size) + return -1; + return src_size; + } +} + +ssize_t PUBLIC zck_end_chunk(zckCtx *zck) { + VALIDATE_WRITE_INT(zck); + + if(!zck->comp.started && !comp_init(zck)) + return -1; + + if(zck->comp.dc_data_size < zck->chunk_min_size) { + zck_log(ZCK_LOG_DDEBUG, "Chunk too small, refusing to end chunk"); + return zck->comp.dc_data_size; + } + + buzhash_reset(&(zck->buzhash)); + /* No point in compressing empty data */ + if(zck->comp.dc_data_size == 0) + return 0; + + size_t data_size = zck->comp.dc_data_size; + char *dst = NULL; + size_t dst_size = 0; + if(!zck->comp.end_cchunk(zck, &(zck->comp), &dst, &dst_size, 1)) + return -1; + zck->comp.dc_data_size = 0; + if(dst_size > 0 && !write_data(zck, zck->temp_fd, dst, dst_size)) { + free(dst); + return -1; + } + if(!index_add_to_chunk(zck, dst, dst_size, 0)) { + free(dst); + return -1; + } + if(!index_finish_chunk(zck)) { + free(dst); + return -1; + } + zck_log(ZCK_LOG_DDEBUG, "Finished chunk size: %lu", data_size); + free(dst); + return data_size; +} + +ssize_t PUBLIC zck_read(zckCtx *zck, char *dst, size_t dst_size) { + VALIDATE_READ_INT(zck); + ALLOCD_INT(zck, dst); + + return comp_read(zck, dst, dst_size, 1); +} + +ssize_t PUBLIC zck_get_chunk_comp_data(zckChunk *idx, char *dst, + size_t dst_size) { + zckCtx *zck = NULL; + if(idx && idx->zck) { + VALIDATE_INT(idx->zck); + zck = idx->zck; + } + ALLOCD_INT(zck, idx); + ALLOCD_INT(zck, dst); + + /* Make sure chunk size is valid */ + if(zck_get_chunk_size(idx) < 0) + return -1; + + /* If the chunk is empty, we're done */ + if(zck_get_chunk_size(idx) == 0) + return 0; + + /* Make sure requested chunk has a beginning */ + if(zck_get_chunk_start(idx) < 0) + return -1; + + /* Seek to beginning of requested chunk */ + if(!seek_data(zck, zck_get_chunk_start(idx), SEEK_SET)) + return -1; + + /* Return read chunk */ + return read_data(zck, dst, dst_size); +} + +ssize_t PUBLIC zck_get_chunk_data(zckChunk *idx, char *dst, + size_t dst_size) { + zckCtx *zck = NULL; + if(idx && idx->zck) { + VALIDATE_INT(idx->zck); + zck = idx->zck; + } + ALLOCD_INT(zck, idx); + ALLOCD_INT(zck, dst); + + /* Make sure chunk size is valid */ + if(zck_get_chunk_size(idx) < 0) + return -1; + /* If the chunk is empty, we're done */ + if(zck_get_chunk_size(idx) == 0) + return 0; + /* Make sure requested chunk has a beginning */ + if(zck_get_chunk_start(idx) < 0) + return -1; + + /* Read dictionary if needed */ + zckChunk *dict = zck_get_first_chunk(zck); + if(dict == NULL) + return -1; + if(zck_get_chunk_size(dict) > 0 && zck->comp.dict == NULL) { + if(zck_get_chunk_start(dict) < 0) + return -1; + if(!seek_data(zck, zck_get_chunk_start(dict), SEEK_SET)) + return -1; + if(!comp_reset(zck)) + return -1; + if(!comp_init(zck)) + return -1; + if(!import_dict(zck)) + return -1; + } + + /* Seek to beginning of requested chunk */ + if(!comp_reset_comp_data(zck)) + return -1; + if(!comp_reset(zck)) + return -1; + if(!comp_init(zck)) + return -1; + if(!seek_data(zck, zck_get_chunk_start(idx), SEEK_SET)) + return -1; + zck->comp.data_idx = idx; + return comp_read(zck, dst, dst_size, 1); +} diff --git a/src/lib/comp/meson.build b/src/lib/comp/meson.build new file mode 100644 index 0000000..b66482b --- /dev/null +++ b/src/lib/comp/meson.build @@ -0,0 +1,5 @@ +lib_sources += files('comp.c') +if zstd_dep.found() + subdir('zstd') +endif +subdir('nocomp') diff --git a/src/lib/comp/nocomp/meson.build b/src/lib/comp/nocomp/meson.build new file mode 100644 index 0000000..6a310d9 --- /dev/null +++ b/src/lib/comp/nocomp/meson.build @@ -0,0 +1 @@ +lib_sources += files('nocomp.c') diff --git a/src/lib/comp/nocomp/nocomp.c b/src/lib/comp/nocomp/nocomp.c new file mode 100644 index 0000000..0b9f85a --- /dev/null +++ b/src/lib/comp/nocomp/nocomp.c @@ -0,0 +1,132 @@ +/* + * Copyright 2018 Jonathan Dieter + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions are met: + * + * 1. Redistributions of source code must retain the above copyright notice, + * this list of conditions and the following disclaimer. + * + * 2. Redistributions in binary form must reproduce the above copyright notice, + * this list of conditions and the following disclaimer in the documentation + * and/or other materials provided with the distribution. + * + * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" + * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE + * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE + * ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE + * LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR + * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF + * SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS + * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN + * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) + * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE + * POSSIBILITY OF SUCH DAMAGE. + */ + +#include +#include +#include +#include +#include + +#include "zck_private.h" + +static bool init(zckCtx *zck, zckComp *comp) { + VALIDATE_BOOL(zck); + ALLOCD_BOOL(zck, comp); + + return true; +} + +static ssize_t compress(zckCtx *zck, zckComp *comp, const char *src, + const size_t src_size, char **dst, size_t *dst_size, + bool use_dict) { + VALIDATE_INT(zck); + ALLOCD_INT(zck, dst); + ALLOCD_INT(zck, src); + ALLOCD_INT(zck, dst_size); + ALLOCD_INT(zck, comp); + + *dst = zmalloc(src_size); + + memcpy(*dst, src, src_size); + *dst_size = src_size; + + return *dst_size; +} + +static bool end_cchunk(zckCtx *zck, zckComp *comp, char **dst, size_t *dst_size, + bool use_dict) { + VALIDATE_BOOL(zck); + ALLOCD_BOOL(zck, dst); + ALLOCD_BOOL(zck, dst_size); + ALLOCD_BOOL(zck, comp); + + *dst = NULL; + *dst_size = 0; + + return true; +} + +static bool decompress(zckCtx *zck, zckComp *comp, const bool use_dict) { + VALIDATE_BOOL(zck); + ALLOCD_BOOL(zck, comp); + + char *src = comp->data; + size_t src_size = comp->data_size; + comp->data = NULL; + comp->data_size = 0; + if(!comp_add_to_dc(zck, comp, src, src_size)) { + free(src); + return false; + } + free(src); + return true; +} + +static bool end_dchunk(zckCtx *zck, zckComp *comp, const bool use_dict, + const size_t fd_size) { + VALIDATE_BOOL(zck); + ALLOCD_BOOL(zck, comp); + + return true; +} + +static bool close(zckCtx *zck, zckComp *comp) { + ALLOCD_BOOL(zck, zck); + ALLOCD_BOOL(zck, comp); + + return true; +} + +/* Nocomp doesn't support any parameters, so return error if setting a parameter + * was attempted */ +static bool set_parameter(zckCtx *zck, zckComp *comp, int option, + const void *value) { + VALIDATE_BOOL(zck); + ALLOCD_BOOL(zck, comp); + + set_error(zck, "Invalid compression parameter for ZCK_COMP_NONE"); + return false; +} + +/* No default parameters to set when there's no compression */ +static bool set_default_parameters(zckCtx *zck, zckComp *comp) { + VALIDATE_BOOL(zck); + ALLOCD_BOOL(zck, comp); + + return true; +} + +bool nocomp_setup(zckCtx *zck, zckComp *comp) { + comp->init = init; + comp->set_parameter = set_parameter; + comp->compress = compress; + comp->end_cchunk = end_cchunk; + comp->decompress = decompress; + comp->end_dchunk = end_dchunk; + comp->close = close; + comp->type = ZCK_COMP_NONE; + return set_default_parameters(zck, comp); +} diff --git a/src/lib/comp/nocomp/nocomp.h b/src/lib/comp/nocomp/nocomp.h new file mode 100644 index 0000000..e15f22c --- /dev/null +++ b/src/lib/comp/nocomp/nocomp.h @@ -0,0 +1,6 @@ +#ifndef ZCHUNK_COMPRESSION_NOCOMP_H +#define ZCHUNK_COMPRESSION_NOCOMP_H + +int nocomp_setup(zckCtx *zck, zckComp *comp); + +#endif diff --git a/src/lib/comp/zstd/meson.build b/src/lib/comp/zstd/meson.build new file mode 100644 index 0000000..13de59d --- /dev/null +++ b/src/lib/comp/zstd/meson.build @@ -0,0 +1 @@ +lib_sources += files('zstd.c') diff --git a/src/lib/comp/zstd/zstd.c b/src/lib/comp/zstd/zstd.c new file mode 100644 index 0000000..feffc6c --- /dev/null +++ b/src/lib/comp/zstd/zstd.c @@ -0,0 +1,225 @@ +/* + * Copyright 2018 Jonathan Dieter + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions are met: + * + * 1. Redistributions of source code must retain the above copyright notice, + * this list of conditions and the following disclaimer. + * + * 2. Redistributions in binary form must reproduce the above copyright notice, + * this list of conditions and the following disclaimer in the documentation + * and/or other materials provided with the distribution. + * + * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" + * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE + * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE + * ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE + * LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR + * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF + * SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS + * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN + * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) + * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE + * POSSIBILITY OF SUCH DAMAGE. + */ + +#include +#include +#include +#include +#include +#include + +#include "zck_private.h" + +static bool init(zckCtx *zck, zckComp *comp) { + VALIDATE_BOOL(zck); + ALLOCD_BOOL(zck, comp); + + comp->cctx = ZSTD_createCCtx(); + comp->dctx = ZSTD_createDCtx(); + if(comp->dict && comp->dict_size > 0) { + comp->cdict_ctx = ZSTD_createCDict(comp->dict, comp->dict_size, + comp->level); + if(comp->cdict_ctx == NULL) { + set_fatal_error(zck, + "Unable to create zstd compression dict context"); + return false; + } + comp->ddict_ctx = ZSTD_createDDict(comp->dict, comp->dict_size); + if(comp->ddict_ctx == NULL) { + set_fatal_error(zck, + "Unable to create zstd decompression dict context"); + return false; + } + } + return true; +} + +static bool close(zckCtx *zck, zckComp *comp) { + ALLOCD_BOOL(zck, zck); + ALLOCD_BOOL(zck, comp); + + if(comp->cdict_ctx) { + ZSTD_freeCDict(comp->cdict_ctx); + comp->cdict_ctx = NULL; + } + if(comp->ddict_ctx) { + ZSTD_freeDDict(comp->ddict_ctx); + comp->ddict_ctx = NULL; + } + if(comp->cctx) { + ZSTD_freeCCtx(comp->cctx); + comp->cctx = NULL; + } + if(comp->dctx) { + ZSTD_freeDCtx(comp->dctx); + comp->dctx = NULL; + } + return true; +} + +/* The zstd compression format doesn't allow streaming compression with a dict + * unless you statically link to it. If we have a dict, we do pseudo-streaming + * compression where we buffer the data until the chunk ends. */ +static ssize_t compress(zckCtx *zck, zckComp *comp, const char *src, + const size_t src_size, char **dst, size_t *dst_size, + bool use_dict) { + VALIDATE_INT(zck); + ALLOCD_INT(zck, dst); + ALLOCD_INT(zck, src); + ALLOCD_INT(zck, dst_size); + ALLOCD_INT(zck, comp); + + comp->dc_data = zrealloc(comp->dc_data, comp->dc_data_size + src_size); + + memcpy(comp->dc_data + comp->dc_data_size, src, src_size); + *dst = NULL; + *dst_size = 0; + return 0; +} + +static bool end_cchunk(zckCtx *zck, zckComp *comp, char **dst, size_t *dst_size, + bool use_dict) { + VALIDATE_BOOL(zck); + ALLOCD_BOOL(zck, dst); + ALLOCD_BOOL(zck, dst_size); + ALLOCD_BOOL(zck, comp); + + size_t max_size = ZSTD_compressBound(comp->dc_data_size); + if(ZSTD_isError(max_size)) { + set_fatal_error(zck, "zstd compression error: %s", + ZSTD_getErrorName(max_size)); + return false; + } + + *dst = zmalloc(max_size); + + /* Currently, compression isn't deterministic when using contexts in + * zstd 1.3.5, so this works around it */ + if(use_dict && comp->cdict_ctx) { + if(comp->cctx) + ZSTD_freeCCtx(comp->cctx); + comp->cctx = ZSTD_createCCtx(); + + *dst_size = ZSTD_compress_usingDict(comp->cctx, *dst, max_size, + comp->dc_data, comp->dc_data_size, + comp->dict, comp->dict_size, + comp->level); + } else { + *dst_size = ZSTD_compress(*dst, max_size, comp->dc_data, + comp->dc_data_size, comp->level); + } + free(comp->dc_data); + comp->dc_data = NULL; + comp->dc_data_loc = 0; + if(ZSTD_isError(*dst_size)) { + set_fatal_error(zck, "zstd compression error: %s", + ZSTD_getErrorName(*dst_size)); + return false; + } + return true; +} + +static bool decompress(zckCtx *zck, zckComp *comp, const bool use_dict) { + VALIDATE_BOOL(zck); + ALLOCD_BOOL(zck, comp); + + return true; +} + +static bool end_dchunk(zckCtx *zck, zckComp *comp, const bool use_dict, + const size_t fd_size) { + VALIDATE_BOOL(zck); + ALLOCD_BOOL(zck, comp); + + char *src = comp->data; + size_t src_size = comp->data_size; + comp->data = NULL; + comp->data_size = 0; + + char *dst = zmalloc(fd_size); + size_t retval = 0; + zck_log(ZCK_LOG_DEBUG, "Decompressing %lu bytes to %lu bytes", src_size, + fd_size); + if(use_dict && comp->ddict_ctx) { + zck_log(ZCK_LOG_DEBUG, "Running decompression using dict"); + retval = ZSTD_decompress_usingDDict(comp->dctx, dst, fd_size, src, + src_size, comp->ddict_ctx); + } else { + zck_log(ZCK_LOG_DEBUG, "Running decompression"); + retval = ZSTD_decompressDCtx(comp->dctx, dst, fd_size, src, src_size); + } + + if(ZSTD_isError(retval)) { + set_fatal_error(zck, "zstd decompression error: %s", + ZSTD_getErrorName(retval)); + goto decomp_error_2; + } + if(!comp_add_to_dc(zck, comp, dst, fd_size)) + goto decomp_error_2; + free(dst); + free(src); + return true; +decomp_error_2: + free(dst); + free(src); + return false; +} + +static bool set_parameter(zckCtx *zck, zckComp *comp, int option, + const void *value) { + VALIDATE_BOOL(zck); + ALLOCD_BOOL(zck, comp); + + if(option == ZCK_ZSTD_COMP_LEVEL) { + if(*(int*)value >= 0 && *(int*)value <= ZSTD_maxCLevel()) { + comp->level = *(int*)value; + return true; + } + } + set_error(zck, "Invalid compression parameter for ZCK_COMP_ZSTD"); + return false; +} + +static bool set_default_parameters(zckCtx *zck, zckComp *comp) { + VALIDATE_BOOL(zck); + ALLOCD_BOOL(zck, comp); + + /* Set default compression level to 9 */ + int level=9; + return set_parameter(zck, comp, ZCK_ZSTD_COMP_LEVEL, &level); +} + +bool zstd_setup(zckCtx *zck, zckComp *comp) { + comp->init = init; + comp->set_parameter = set_parameter; + comp->compress = compress; + comp->end_cchunk = end_cchunk; + comp->decompress = decompress; + comp->end_dchunk = end_dchunk; + comp->close = close; + comp->type = ZCK_COMP_ZSTD; + return set_default_parameters(zck, comp); +} diff --git a/src/lib/comp/zstd/zstd.h b/src/lib/comp/zstd/zstd.h new file mode 100644 index 0000000..e948395 --- /dev/null +++ b/src/lib/comp/zstd/zstd.h @@ -0,0 +1,6 @@ +#ifndef ZCHUNK_COMPRESSION_ZSTD_H +#define ZCHUNK_COMPRESSION_ZSTD_H + +int zstd_setup(zckCtx *zck, zckComp *comp); + +#endif diff --git a/src/lib/compint.c b/src/lib/compint.c new file mode 100644 index 0000000..d3f491e --- /dev/null +++ b/src/lib/compint.c @@ -0,0 +1,110 @@ +/* + * Copyright 2018 Jonathan Dieter + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions are met: + * + * 1. Redistributions of source code must retain the above copyright notice, + * this list of conditions and the following disclaimer. + * + * 2. Redistributions in binary form must reproduce the above copyright notice, + * this list of conditions and the following disclaimer in the documentation + * and/or other materials provided with the distribution. + * + * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" + * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE + * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE + * ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE + * LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR + * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF + * SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS + * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN + * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) + * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE + * POSSIBILITY OF SUCH DAMAGE. + */ + +#include +#include +#include +#include +#include "zck_private.h" + +void compint_from_size(char *compint, size_t val, size_t *length) { + for(unsigned char *i = (unsigned char *)compint; ; i++) { + i[0] = val % 128; + val = (val - i[0]) / 128; + (*length)++; + if(val == 0) { + i[0] += 128; + break; + } + } + return; +} + +int compint_to_size(zckCtx *zck, size_t *val, const char *compint, + size_t *length, size_t max_length) { + VALIDATE_BOOL(zck); + + *val = 0; + size_t old_val = 0; + const unsigned char *i = (unsigned char *)compint; + int count = 0; + bool done = false; + while(true) { + size_t c = i[0]; + if(c >= 128) { + c -= 128; + done = true; + } + /* There *must* be a more elegant way of doing c * 128**count */ + for(int f=0; f MAX_COMP_SIZE || count > max_length || *val < old_val) { + if(count > max_length) + set_fatal_error(zck, "Read past end of header"); + else + set_fatal_error(zck, "Number too large"); + *length -= count; + *val = 0; + return false; + } + old_val = *val; + } + return true; +} + +int compint_from_int(zckCtx *zck, char *compint, int val, size_t *length) { + VALIDATE_BOOL(zck); + + if(val < 0) { + set_error(zck, "Unable to compress negative integers"); + return false; + } + + compint_from_size(compint, (size_t)val, length); + return true; +} + +int compint_to_int(zckCtx *zck, int *val, const char *compint, size_t *length, + size_t max_length) { + VALIDATE_BOOL(zck); + + size_t new = (size_t)*val; + if(!compint_to_size(zck, &new, compint, length, max_length)) + return false; + *val = (int)new; + if(*val < 0) { + set_fatal_error(zck, "Overflow error: compressed int is negative"); + return false; + } + return true; +} diff --git a/src/lib/dl/dl.c b/src/lib/dl/dl.c new file mode 100644 index 0000000..7e5707c --- /dev/null +++ b/src/lib/dl/dl.c @@ -0,0 +1,416 @@ +/* + * Copyright 2018 Jonathan Dieter + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions are met: + * + * 1. Redistributions of source code must retain the above copyright notice, + * this list of conditions and the following disclaimer. + * + * 2. Redistributions in binary form must reproduce the above copyright notice, + * this list of conditions and the following disclaimer in the documentation + * and/or other materials provided with the distribution. + * + * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" + * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE + * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE + * ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE + * LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR + * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF + * SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS + * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN + * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) + * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE + * POSSIBILITY OF SUCH DAMAGE. + */ + +#include +#include +#include +#include +#include +#include +#include +#include +#include + +#include "zck_private.h" + +/* Free zckDL header regex used for downloading ranges */ +static void clear_dl_regex(zckDL *dl) { + if(dl == NULL) + return; + + if(dl->hdr_regex) { + regfree(dl->hdr_regex); + free(dl->hdr_regex); + dl->hdr_regex = NULL; + } + if(dl->dl_regex) { + regfree(dl->dl_regex); + free(dl->dl_regex); + dl->dl_regex = NULL; + } + if(dl->end_regex) { + regfree(dl->end_regex); + free(dl->end_regex); + dl->end_regex = NULL; + } +} + +/* Write zeros to tgt->fd in location of tgt_idx */ +static bool zero_chunk(zckCtx *tgt, zckChunk *tgt_idx) { + char buf[BUF_SIZE] = {0}; + size_t to_read = tgt_idx->comp_length; + if(!seek_data(tgt, tgt->data_offset + tgt_idx->start, SEEK_SET)) + return false; + while(to_read > 0) { + int rb = BUF_SIZE; + if(rb > to_read) + rb = to_read; + if(!write_data(tgt, tgt->fd, buf, rb)) + return false; + to_read -= rb; + } + return true; +} + +/* Check whether last downloaded chunk is valid and zero it out if it isn't */ +static bool set_chunk_valid(zckDL *dl) { + ALLOCD_BOOL(NULL, dl); + VALIDATE_BOOL(dl->zck); + + int retval = validate_chunk(dl->tgt_check, ZCK_LOG_WARNING); + if(retval < 1) { + if(!zero_chunk(dl->zck, dl->tgt_check)) + return false; + dl->tgt_check->valid = -1; + return false; + } else { + dl->tgt_check->valid = 1; + } + dl->tgt_check = NULL; + return true; +} + +/* Write length or to end of current chunk, whichever comes first */ +static int dl_write(zckDL *dl, const char *at, size_t length) { + ALLOCD_INT(NULL, dl); + VALIDATE_INT(dl->zck); + + int wb = 0; + if(dl->write_in_chunk > 0) { + if(dl->write_in_chunk < length) + wb = dl->write_in_chunk; + else + wb = length; + if(!write_data(dl->zck, dl->zck->fd, at, wb)) + return -1; + dl->write_in_chunk -= wb; + if(!hash_update(dl->zck, &(dl->zck->check_chunk_hash), at, wb)) + return -1; + zck_log(ZCK_LOG_DEBUG, "Writing %lu bytes", wb); + dl->dl_chunk_data += wb; + } + return wb; +} + +/* Copy chunk identified by src_idx into location specified by tgt_idx */ +static bool write_and_verify_chunk(zckCtx *src, zckCtx *tgt, + zckChunk *src_idx, + zckChunk *tgt_idx) { + VALIDATE_READ_BOOL(src); + VALIDATE_READ_BOOL(tgt); + + static char buf[BUF_SIZE] = {0}; + + size_t to_read = src_idx->comp_length; + if(!seek_data(src, src->data_offset + src_idx->start, SEEK_SET)) + return false; + if(!seek_data(tgt, tgt->data_offset + tgt_idx->start, SEEK_SET)) + return false; + zckHash check_hash = {0}; + if(!hash_init(tgt, &check_hash, &(src->chunk_hash_type))) + return false; + while(to_read > 0) { + int rb = BUF_SIZE; + if(rb > to_read) + rb = to_read; + if(!read_data(src, buf, rb)) + return false; + if(!hash_update(tgt, &check_hash, buf, rb)) + return false; + if(!write_data(tgt, tgt->fd, buf, rb)) + return false; + to_read -= rb; + } + char *digest = hash_finalize(tgt, &check_hash); + /* If chunk is invalid, overwrite with zeros and add to download range */ + if(memcmp(digest, src_idx->digest, src_idx->digest_size) != 0) { + char *pdigest = zck_get_chunk_digest(src_idx); + zck_log(ZCK_LOG_WARNING, "Source hash: %s", pdigest); + free(pdigest); + pdigest = get_digest_string(digest, src_idx->digest_size); + zck_log(ZCK_LOG_WARNING, "Target hash: %s", pdigest); + free(pdigest); + if(!zero_chunk(tgt, tgt_idx)) + return false; + tgt_idx->valid = -1; + } else { + tgt_idx->valid = 1; + zck_log(ZCK_LOG_DEBUG, "Wrote %lu bytes at %lu", + tgt_idx->comp_length, tgt_idx->start); + } + free(digest); + return true; +} + +/* Split current read into the appropriate chunks and write appropriately */ +int dl_write_range(zckDL *dl, const char *at, size_t length) { + ALLOCD_BOOL(NULL, dl); + VALIDATE_BOOL(dl->zck); + + if(dl->range == NULL) { + set_error(dl->zck, "zckDL range not initialized"); + return 0; + } + + if(dl->range->index.first == NULL) { + set_error(dl->zck, "zckDL index not initialized"); + return 0; + } + if(dl->zck->index.first == NULL) { + set_error(dl->zck, "zckCtx index not initialized"); + return 0; + } + int wb = dl_write(dl, at, length); + if(wb < 0) + return 0; + if(dl->write_in_chunk == 0) { + /* Check whether we just finished downloading a chunk and verify it */ + if(dl->tgt_check && !set_chunk_valid(dl)) + return false; + + if(dl->range->index.current == NULL) + dl->range->index.current = dl->range->index.first; + for(zckChunk *chk = dl->range->index.current; chk; chk = chk->next) { + if(dl->dl_chunk_data != chk->start) + continue; + + int count = 0; + zckChunk *tgt_chk = chk->src; + if(tgt_chk->valid == 1) + continue; + if(chk->comp_length == tgt_chk->comp_length && + memcmp(chk->digest, tgt_chk->digest, + chk->digest_size) == 0) { + dl->tgt_check = tgt_chk; + dl->tgt_number = count; + if(!hash_init(dl->zck, &(dl->zck->check_chunk_hash), + &(dl->zck->chunk_hash_type))) + return 0; + dl->write_in_chunk = chk->comp_length; + if(!seek_data(dl->zck, + dl->zck->data_offset + tgt_chk->start, + SEEK_SET)) + return 0; + dl->range->index.current = chk->next; + chk = NULL; + tgt_chk = NULL; + break; + } + } + } + int wb2 = 0; + /* We've still got data, call recursively */ + if(dl->write_in_chunk > 0 && wb < length) { + wb2 = dl_write_range(dl, at+wb, length-wb); + if(wb2 == 0) + return 0; + } + return wb + wb2; +} + +bool PUBLIC zck_copy_chunks(zckCtx *src, zckCtx *tgt) { + VALIDATE_READ_BOOL(src); + VALIDATE_READ_BOOL(tgt); + + zckIndex *tgt_info = &(tgt->index); + zckIndex *src_info = &(src->index); + zckChunk *tgt_idx = tgt_info->first; + while(tgt_idx) { + /* No need to copy already valid chunk */ + if(tgt_idx->valid == 1) { + tgt_idx = tgt_idx->next; + continue; + } + zckChunk *f = NULL; + + HASH_FIND(hh, src_info->ht, tgt_idx->digest, tgt_idx->digest_size, f); + if(f && f->length == tgt_idx->length && + f->comp_length == tgt_idx->comp_length) + write_and_verify_chunk(src, tgt, f, tgt_idx); + tgt_idx = tgt_idx->next; + } + return true; +} + +ssize_t PUBLIC zck_dl_get_bytes_downloaded(zckDL *dl) { + ALLOCD_INT(NULL, dl); + + return dl->dl; +} + +ssize_t PUBLIC zck_dl_get_bytes_uploaded(zckDL *dl) { + ALLOCD_INT(NULL, dl); + + return dl->ul; +} + +/* Initialize zckDL. When finished, zckDL *must* be freed by zck_dl_free() */ +zckDL PUBLIC *zck_dl_init(zckCtx *zck) { + zckDL *dl = zmalloc(sizeof(zckDL)); + dl->mp = zmalloc(sizeof(zckMP)); + dl->zck = zck; + return dl; +} + +/* Reset dl while maintaining download statistics and private information */ +void PUBLIC zck_dl_reset(zckDL *dl) { + if(!dl) + return; + + reset_mp(dl->mp); + dl->dl_chunk_data = 0; + clear_dl_regex(dl); + if(dl->boundary) + free(dl->boundary); + dl->boundary = NULL; + + zckCtx *zck = dl->zck; + size_t db = dl->dl; + size_t ub = dl->ul; + zckMP *mp = dl->mp; + memset(dl, 0, sizeof(zckDL)); + dl->zck = zck; + dl->dl = db; + dl->ul = ub; + dl->mp = mp; +} + +/* Free zckDL and set pointer to NULL */ +void PUBLIC zck_dl_free(zckDL **dl) { + zck_dl_reset(*dl); + if((*dl)->mp) + free((*dl)->mp); + free(*dl); + *dl = NULL; +} + +zckCtx PUBLIC *zck_dl_get_zck(zckDL *dl) { + ALLOCD_PTR(NULL, dl); + + return dl->zck; +} + +bool PUBLIC zck_dl_set_zck(zckDL *dl, zckCtx *zck) { + ALLOCD_BOOL(NULL, dl); + + dl->zck = zck; + return true; +} +bool PUBLIC zck_dl_set_range(zckDL *dl, zckRange *range) { + ALLOCD_BOOL(NULL, dl); + + dl->range = range; + return true; +} + +zckRange PUBLIC *zck_dl_get_range(zckDL *dl) { + ALLOCD_PTR(NULL, dl); + + return dl->range; +} + +bool PUBLIC zck_dl_set_header_cb(zckDL *dl, zck_wcb func) { + ALLOCD_BOOL(NULL, dl); + + dl->header_cb = func; + return true; +} + +bool PUBLIC zck_dl_set_header_data(zckDL *dl, void *data) { + ALLOCD_BOOL(NULL, dl); + + dl->header_data = data; + return true; +} + +bool PUBLIC zck_dl_set_write_cb(zckDL *dl, zck_wcb func) { + ALLOCD_BOOL(NULL, dl); + + dl->write_cb = func; + return true; +} + +bool PUBLIC zck_dl_set_write_data(zckDL *dl, void *data) { + ALLOCD_BOOL(NULL, dl); + + dl->write_data = data; + return true; +} + +/******************************************************************* + * Callbacks + *******************************************************************/ + +size_t PUBLIC zck_header_cb(char *b, size_t l, size_t c, void *dl_v) { + ALLOCD_BOOL(NULL, dl_v); + zckDL *dl = (zckDL*)dl_v; + + if(multipart_get_boundary(dl, b, c*l) == 0) + zck_log(ZCK_LOG_DEBUG, "No boundary detected"); + + if(dl->header_cb) + return dl->header_cb(b, l, c, dl->header_data); + return c*l; +} + +size_t PUBLIC zck_write_zck_header_cb(void *ptr, size_t l, size_t c, + void *dl_v) { + ALLOCD_BOOL(NULL, dl_v); + zckDL *dl = (zckDL*)dl_v; + + size_t wb = 0; + dl->dl += l*c; + size_t loc = tell_data(dl->zck); + zck_log(ZCK_LOG_DEBUG, "Downloading %lu bytes to position %lu", l*c, loc); + wb = write(dl->zck->fd, ptr, l*c); + if(dl->write_cb) + return dl->write_cb(ptr, l, c, dl->write_data); + return wb; +} + +size_t PUBLIC zck_write_chunk_cb(void *ptr, size_t l, size_t c, void *dl_v) { + ALLOCD_BOOL(NULL, dl_v); + zckDL *dl = (zckDL*)dl_v; + + size_t wb = 0; + dl->dl += l*c; + if(dl->boundary != NULL) { + int retval = multipart_extract(dl, ptr, l*c); + if(retval == 0) + wb = 0; + else + wb = l*c; + } else { + int retval = dl_write_range(dl, ptr, l*c); + if(retval == 0) + wb = 0; + else + wb = l*c; + } + if(dl->write_cb) + return dl->write_cb(ptr, l, c, dl->write_data); + return wb; +} diff --git a/src/lib/dl/meson.build b/src/lib/dl/meson.build new file mode 100644 index 0000000..eb8caf6 --- /dev/null +++ b/src/lib/dl/meson.build @@ -0,0 +1 @@ +lib_sources += files(['range.c', 'dl.c', 'multipart.c']) diff --git a/src/lib/dl/multipart.c b/src/lib/dl/multipart.c new file mode 100644 index 0000000..8d43472 --- /dev/null +++ b/src/lib/dl/multipart.c @@ -0,0 +1,254 @@ +/* + * Copyright 2018 Jonathan Dieter + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions are met: + * + * 1. Redistributions of source code must retain the above copyright notice, + * this list of conditions and the following disclaimer. + * + * 2. Redistributions in binary form must reproduce the above copyright notice, + * this list of conditions and the following disclaimer in the documentation + * and/or other materials provided with the distribution. + * + * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" + * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE + * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE + * ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE + * LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR + * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF + * SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS + * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN + * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) + * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE + * POSSIBILITY OF SUCH DAMAGE. + */ + +#include +#include +#include +#include +#include +#include +#include + +#include "zck_private.h" + +static char *add_boundary_to_regex(zckCtx *zck, const char *regex, + const char *boundary) { + VALIDATE_PTR(zck); + + if(regex == NULL || boundary == NULL) + return NULL; + char *regex_b = zmalloc(strlen(regex) + strlen(boundary) + 1); + if(snprintf(regex_b, strlen(regex) + strlen(boundary), regex, + boundary) != strlen(regex) + strlen(boundary) - 2) { + free(regex_b); + set_error(zck, "Unable to build regular expression"); + return NULL; + } + return regex_b; +} + +static bool create_regex(zckCtx *zck, regex_t *reg, const char *regex) { + VALIDATE_BOOL(zck); + + if(reg == NULL || regex == NULL) { + set_error(zck, "Regular expression not initialized"); + return false; + } + if(regcomp(reg, regex, REG_ICASE | REG_EXTENDED) != 0) { + set_error(zck, "Unable to compile regular expression"); + return false; + } + return true; +} + +static bool gen_regex(zckDL *dl) { + ALLOCD_BOOL(NULL, dl); + VALIDATE_BOOL(dl->zck); + + /* Response should include content-type, but we only need the range, so + * wildcard out the content-type */ + char *next = "\r\n--%s\r\n.*" \ + "content-range: *bytes *([0-9]+) *- *([0-9]+) */[0-9]+"; + char *end = "\r\n--%s--"; + char *regex_n = add_boundary_to_regex(dl->zck, next, dl->boundary); + if(regex_n == NULL) + return false; + dl->dl_regex = zmalloc(sizeof(regex_t)); + if(!create_regex(dl->zck, dl->dl_regex, regex_n)) { + free(regex_n); + return false; + } + free(regex_n); + char *regex_e = add_boundary_to_regex(dl->zck, end, dl->boundary); + if(regex_e == NULL) + return false; + dl->end_regex = zmalloc(sizeof(regex_t)); + if(!create_regex(dl->zck, dl->end_regex, regex_e)) { + free(regex_e); + return false; + } + free(regex_e); + return true; +} + +void reset_mp(zckMP *mp) { + if(mp == NULL) + return; + if(mp->buffer) + free(mp->buffer); + memset(mp, 0, sizeof(zckMP)); +} + +size_t multipart_extract(zckDL *dl, char *b, size_t l) { + ALLOCD_BOOL(NULL, dl); + VALIDATE_BOOL(dl->zck); + + if(dl->mp == NULL) + return 0; + + zckMP *mp = dl->mp; + char *buf = b; + bool alloc_buf = false; + + /* Add new data to stored buffer */ + if(mp->buffer) { + buf = zrealloc(mp->buffer, mp->buffer_len + l); + memcpy(buf + mp->buffer_len, b, l); + l = mp->buffer_len + l; + mp->buffer = NULL; // No need to free, buf holds realloc'd buffer + mp->buffer_len = 0; + alloc_buf = true; + } + + /* If regex hasn't been created, create it */ + if(dl->dl_regex == NULL && !gen_regex(dl)) { + if(alloc_buf) + free(buf); + return 0; + } + + char *header_start = buf; + char *i = buf; + while(i) { + char *end = buf + l; + /* If we're in data writing state, then write data until end of buffer + * or end of range, whichever comes first */ + if(mp->state != 0) { + if(i >= end) + break; + size_t size = end - i; + if(mp->length <= size) { + size = mp->length; + mp->length = 0; + mp->state = 0; + header_start = i + size; + } else { + mp->length -= size; + } + if(dl_write_range(dl, i, size) != size) + return 0; + i += size; + continue; + } + + /* If we've reached the end of the buffer without finishing, save it + * and leave loop */ + if(i >= end) { + size_t size = buf + l - header_start; + if(size > 0) { + mp->buffer = zmalloc(size); + memcpy(mp->buffer, header_start, size); + mp->buffer_len = size; + } + break; + } + + /* Find double newline and replace final \n with \0, so it's a zero- + * terminated string. This is the part header. After finding the end + * of the part header (and beginning of the actual data), set j to that + * so we can set i to it when we finish getting the part header info */ + char *j = i; + for(; j= end) { + i = j+4; + break; + } + if(memcmp(j, "\r\n\r\n", 4) == 0) { + j[3] = '\0'; + j += 4; + break; + } + } + if(i >= end) + continue; + + /* Run regex against download range string */ + regmatch_t match[4] = {{0}}; + if(regexec(dl->dl_regex, i, 3, match, 0) != 0) { + if(regexec(dl->end_regex, i, 3, match, 0) != 0) + set_error(dl->zck, "Unable to find multipart download range"); + goto end; + } + + /* Get range start from regex */ + size_t rstart = 0; + for(char *c=i + match[1].rm_so; c < i + match[1].rm_eo; c++) + rstart = rstart*10 + (size_t)(c[0] - 48); + + /* Get range end from regex */ + size_t rend = 0; + for(char *c=i + match[2].rm_so; c < i + match[2].rm_eo; c++) + rend = rend*10 + (size_t)(c[0] - 48); + + i = j; + zck_log(ZCK_LOG_DEBUG, "Download range: %lu-%lu", rstart, rend); + mp->length = rend-rstart+1; + mp->state = 1; + } +end: + if(alloc_buf) + free(buf); + return l; +} + +size_t multipart_get_boundary(zckDL *dl, char *b, size_t size) { + ALLOCD_BOOL(NULL, dl); + VALIDATE_BOOL(dl->zck); + + /* Create regex to find boundary */ + if(dl->hdr_regex == NULL) { + char *regex = "boundary *= *(.*?) *\r"; + dl->hdr_regex = zmalloc(sizeof(regex_t)); + if(!create_regex(dl->zck, dl->hdr_regex, regex)) + return 0; + } + + /* Copy buffer to null-terminated string because POSIX regex requires null- + * terminated string */ + char *buf = zmalloc(size+1); + buf[size] = '\0'; + memcpy(buf, b, size); + + /* Check whether this header contains the boundary and set it if it does */ + regmatch_t match[2] = {{0}}; + if(regexec(dl->hdr_regex, buf, 2, match, 0) == 0) { + reset_mp(dl->mp); + size_t boundary_length = match[1].rm_eo - match[1].rm_so; + char *boundary_start = buf + match[1].rm_so; + if ( boundary_start[0] == '\"' && boundary_length > 2 + && boundary_start[boundary_length-1] == '\"') { + /* Remove optional quotes */ + boundary_start += 1; + boundary_length -= 2; + } + char *boundary = zmalloc(boundary_length + 1); + memcpy(boundary, boundary_start, boundary_length); + zck_log(ZCK_LOG_DEBUG, "Multipart boundary: %s", boundary); + dl->boundary = boundary; + } + free(buf); + return size; +} diff --git a/src/lib/dl/range.c b/src/lib/dl/range.c new file mode 100644 index 0000000..e102fa9 --- /dev/null +++ b/src/lib/dl/range.c @@ -0,0 +1,214 @@ +/* + * Copyright 2018 Jonathan Dieter + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions are met: + * + * 1. Redistributions of source code must retain the above copyright notice, + * this list of conditions and the following disclaimer. + * + * 2. Redistributions in binary form must reproduce the above copyright notice, + * this list of conditions and the following disclaimer in the documentation + * and/or other materials provided with the distribution. + * + * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" + * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE + * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE + * ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE + * LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR + * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF + * SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS + * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN + * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) + * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE + * POSSIBILITY OF SUCH DAMAGE. + */ + +#include +#include +#include +#include +#include +#include +#include +#include + +#include "zck_private.h" + +static zckRangeItem *range_insert_new(zckCtx *zck, zckRangeItem *prev, + zckRangeItem *next, uint64_t start, + uint64_t end, zckRange *info, + zckChunk *idx, int add_index) { + VALIDATE_PTR(zck); + + zckRangeItem *new = zmalloc(sizeof(zckRangeItem)); + new->start = start; + new->end = end; + if(prev) { + new->prev = prev; + prev->next = new; + } + if(next) { + new->next = next; + next->prev = new; + } + if(add_index) + if(!index_new_chunk(zck, &(info->index), idx->digest, idx->digest_size, + end-start+1, end-start+1, idx, false)) { + free(new); + return NULL; + } + return new; +} + +static zckRangeItem *range_remove(zckCtx *zck, zckRangeItem *range) { + zckRangeItem *next = range->next; + if(range->next) + range->next->prev = range->prev; + free(range); + return next; +} + +static void range_merge_combined(zckCtx *zck, zckRange *info) { + if(!info) { + set_error(zck, "zckRange not allocated"); + return; + } + for(zckRangeItem *ptr=info->first; ptr;) { + if(ptr->next && ptr->end >= ptr->next->start-1) { + if(ptr->end < ptr->next->end) + ptr->end = ptr->next->end; + ptr->next = range_remove(zck, ptr->next); + info->count -= 1; + } else { + ptr = ptr->next; + } + } +} + +static bool range_add(zckRange *info, zckChunk *chk, zckCtx *zck) { + if(info == NULL || chk == NULL) { + set_error(zck, "zckRange or zckChunk not allocated"); + return false; + } + size_t header_len = 0; + bool add_index = false; + if(zck) { + header_len = zck_get_header_length(zck); + add_index = true; + } + + size_t start = chk->start + header_len; + size_t end = chk->start + header_len + chk->comp_length - 1; + zckRangeItem *prev = info->first; + for(zckRangeItem *ptr=info->first; ptr;) { + prev = ptr; + if(start > ptr->start) { + ptr = ptr->next; + continue; + } else if(start < ptr->start) { + if(range_insert_new(zck, ptr->prev, ptr, start, end, info, chk, + add_index) == NULL) + return false; + if(info->first == ptr) { + info->first = ptr->prev; + } + info->count += 1; + range_merge_combined(zck, info); + return true; + } else { // start == ptr->start + if(end > ptr->end) + ptr->end = end; + info->count += 1; + range_merge_combined(zck, info); + return true; + } + } + /* We've only reached here if we should be last item */ + zckRangeItem *new = range_insert_new(zck, prev, NULL, start, end, info, chk, + add_index); + if(new == NULL) + return false; + if(info->first == NULL) + info->first = new; + info->count += 1; + range_merge_combined(zck, info); + return true; +} + +void PUBLIC zck_range_free(zckRange **info) { + zckRangeItem *next = (*info)->first; + while(next) { + zckRangeItem *tmp = next; + next = next->next; + free(tmp); + } + index_clean(&((*info)->index)); + free(*info); + *info = NULL; +} + +char PUBLIC *zck_get_range_char(zckCtx *zck, zckRange *range) { + int buf_size = BUF_SIZE; + char *output = zmalloc(buf_size); + int loc = 0; + int count = 0; + zckRangeItem *ri = range->first; + while(ri) { + int length = snprintf(output+loc, buf_size-loc, "%lu-%lu,", + (long unsigned)ri->start, + (long unsigned)ri->end); + if(length < 0) { + set_fatal_error(zck, "Unable to get range: %s", strerror(errno)); + free(output); + return NULL; + } + if(length > buf_size-loc) { + buf_size = (int)(buf_size * 1.5); + output = zrealloc(output, buf_size); + continue; + } + loc += length; + count++; + ri = ri->next; + } + output[loc-1]='\0'; // Remove final comma + output = zrealloc(output, loc); + return output; +} + +zckRange PUBLIC *zck_get_missing_range(zckCtx *zck, int max_ranges) { + VALIDATE_PTR(zck); + + zckRange *range = zmalloc(sizeof(zckRange)); + for(zckChunk *chk = zck->index.first; chk; chk = chk->next) { + if(chk->valid) + continue; + + if(!range_add(range, chk, zck)) { + zck_range_free(&range); + return NULL; + } + if(max_ranges >= 0 && range->count >= max_ranges) + break; + } + return range; +} + +char PUBLIC *zck_get_range(size_t start, size_t end) { + zckRange range = {0}; + zckRangeItem ri = {0}; + zckCtx *zck = zck_create(); + range.first = &ri; + ri.start = start; + ri.end = end; + char *ret = zck_get_range_char(zck, &range); + zck_free(&zck); + return ret; +} + +int PUBLIC zck_get_range_count(zckRange *range) { + ALLOCD_INT(NULL, range); + + return range->count; +} diff --git a/src/lib/error.c b/src/lib/error.c new file mode 100644 index 0000000..b04d61f --- /dev/null +++ b/src/lib/error.c @@ -0,0 +1,107 @@ +/* + * Copyright 2018 Jonathan Dieter + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions are met: + * + * 1. Redistributions of source code must retain the above copyright notice, + * this list of conditions and the following disclaimer. + * + * 2. Redistributions in binary form must reproduce the above copyright notice, + * this list of conditions and the following disclaimer in the documentation + * and/or other materials provided with the distribution. + * + * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" + * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE + * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE + * ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE + * LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR + * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF + * SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS + * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN + * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) + * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE + * POSSIBILITY OF SUCH DAMAGE. + */ + +#include +#include +#include +#include +#include +#include + +#include "zck_private.h" + +static const char *empty_error = ""; + +zckCtx zck_none = {0}; + +void set_error_wf(zckCtx *zck, int fatal, const char *function, + const char *format, ...) { + va_list args; + int size = 0; + char *old_msg = NULL; + int old_size = 0; + assert(format != NULL); + + if(zck == NULL) + zck = &zck_none; + + zck->error_state = 1 + (fatal > 0 ? 1 : 0); + va_start(args, format); + size = vsnprintf(NULL, 0, format, args); + va_end(args); + va_start(args, format); + zck_log_v(function, ZCK_LOG_ERROR, format, args); + va_end(args); + if(size < 0) + return; + if(zck->msg != NULL) { + old_size = strlen(zck->msg); + old_msg = zck->msg; + } + if(old_msg) + zck->msg = zmalloc(size + old_size + 3); + else + zck->msg = zmalloc(size + 2); + va_start(args, format); + vsnprintf(zck->msg, size + 1, format, args); + va_end(args); + if(old_msg) { + snprintf(zck->msg + size, old_size + 3, ": %s", old_msg); + free(old_msg); + } else { + snprintf(zck->msg + size, 2, "\n"); + } + +} + +int PUBLIC zck_is_error(zckCtx *zck) { + if(zck == NULL) + zck = &zck_none; + + return zck->error_state; +} + +const char PUBLIC *zck_get_error(zckCtx *zck) { + if(zck == NULL) + zck = &zck_none; + + if(zck->msg == NULL) + return empty_error; + return zck->msg; +} + +bool PUBLIC zck_clear_error(zckCtx *zck) { + if(zck != NULL && zck->error_state > 1) + return false; + + if(zck == NULL) + zck = &zck_none; + + free(zck->msg); + zck->msg = NULL; + zck->error_state = 0; + return true; +} diff --git a/src/lib/hash/hash.c b/src/lib/hash/hash.c new file mode 100644 index 0000000..d2b0041 --- /dev/null +++ b/src/lib/hash/hash.c @@ -0,0 +1,532 @@ +/* + * Copyright 2018 Jonathan Dieter + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions are met: + * + * 1. Redistributions of source code must retain the above copyright notice, + * this list of conditions and the following disclaimer. + * + * 2. Redistributions in binary form must reproduce the above copyright notice, + * this list of conditions and the following disclaimer in the documentation + * and/or other materials provided with the distribution. + * + * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" + * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE + * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE + * ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE + * LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR + * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF + * SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS + * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN + * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) + * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE + * POSSIBILITY OF SUCH DAMAGE. + */ + +#include +#include +#include +#include +#include +#include + +#include "zck_private.h" + +/***** If we're not using OpenSSL, use bundled sha libraries *****/ +#ifndef ZCHUNK_OPENSSL +#include "sha1/sha1.h" +#include "sha2/sha2.h" +#define SHA256_CTX sha256_ctx +#define SHA256_Init sha256_init +#define SHA256_Update sha256_update +static void SHA256_Final(unsigned char *md, SHA256_CTX *c) { + sha256_final(c, md); +} +#define SHA512_CTX sha512_ctx +#define SHA512_Init sha512_init +#define SHA512_Update sha512_update +static void SHA512_Final(unsigned char *md, SHA512_CTX *c) { + sha512_final(c, md); +} +/***** If we are using OpenSSL, set the defines accordingly *****/ +#else +#include +#define SHA512_DIGEST_SIZE SHA512_DIGEST_LENGTH +#define SHA256_DIGEST_SIZE SHA256_DIGEST_LENGTH +#define SHA1_DIGEST_LENGTH SHA_DIGEST_LENGTH +#define sha1_byte void +#endif + +/* This needs to be updated to the largest hash size every time a new hash type + * is added */ +int get_max_hash_size() { + return SHA512_DIGEST_SIZE; +} + +static char unknown[] = "Unknown(\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0"; + +const static char *HASH_NAME[] = { + "SHA-1", + "SHA-256", + "SHA-512", + "SHA-512/128" +}; + +static int validate_checksums(zckCtx *zck, zck_log_type bad_checksums) { + VALIDATE_READ_BOOL(zck); + char buf[BUF_SIZE] = {0}; + + if(zck->data_offset == 0) { + set_error(zck, "Header hasn't been read yet"); + return 0; + } + + if(!hash_init(zck, &(zck->check_full_hash), &(zck->hash_type))) + return 0; + + if(!seek_data(zck, zck->data_offset, SEEK_SET)) + return 0; + + /* Check each chunk checksum */ + bool all_good = true; + for(zckChunk *idx = zck->index.first; idx; idx = idx->next) { + if(idx == zck->index.first && idx->length == 0) { + idx->valid = 1; + continue; + } + + if(!hash_init(zck, &(zck->check_chunk_hash), &(zck->chunk_hash_type))) + return 0; + + size_t rlen = 0; + while(rlen < idx->comp_length) { + size_t rsize = BUF_SIZE; + if(BUF_SIZE > idx->comp_length - rlen) + rsize = idx->comp_length - rlen; + if(read_data(zck, buf, rsize) != rsize) + zck_log(ZCK_LOG_DEBUG, "No more data"); + if(!hash_update(zck, &(zck->check_chunk_hash), buf, rsize)) + return 0; + if(!hash_update(zck, &(zck->check_full_hash), buf, rsize)) + return 0; + rlen += rsize; + } + int valid_chunk = validate_chunk(idx, bad_checksums); + if(!valid_chunk) + return 0; + idx->valid = valid_chunk; + if(all_good && valid_chunk != 1) + all_good = false; + } + int valid_file = -1; + if(all_good) { + /* Check data checksum */ + valid_file = validate_file(zck, bad_checksums); + if(!valid_file) + return 0; + + /* If data checksum failed, invalidate *all* chunks */ + if(valid_file == -1) + for(zckChunk *idx = zck->index.first; idx; idx = idx->next) + idx->valid = -1; + } + + /* Go back to beginning of data section */ + if(!seek_data(zck, zck->data_offset, SEEK_SET)) + return 0; + + /* Reinitialize data checksum */ + if(!hash_init(zck, &(zck->check_full_hash), &(zck->hash_type))) + return 0; + + return valid_file; +} + +char *get_digest_string(const char *digest, int size) { + char *str = zmalloc(size*2+1); + + for(int i=0; itype = ZCK_HASH_SHA1; + ht->digest_size = SHA1_DIGEST_LENGTH; + zck_log(ZCK_LOG_DEBUG, "Setting up hash type %s", + zck_hash_name_from_type(ht->type)); + return true; + } else if(h == ZCK_HASH_SHA256) { + memset(ht, 0, sizeof(zckHashType)); + ht->type = ZCK_HASH_SHA256; + ht->digest_size = SHA256_DIGEST_SIZE; + zck_log(ZCK_LOG_DEBUG, "Setting up hash type %s", + zck_hash_name_from_type(ht->type)); + return true; + } else if(h >= ZCK_HASH_SHA512 && + h <= ZCK_HASH_SHA512_128) { + memset(ht, 0, sizeof(zckHashType)); + ht->type = h; + if(h == ZCK_HASH_SHA512) + ht->digest_size = SHA512_DIGEST_SIZE; + else if(h == ZCK_HASH_SHA512_128) + ht->digest_size = 16; + zck_log(ZCK_LOG_DEBUG, "Setting up hash type %s", + zck_hash_name_from_type(ht->type)); + return true; + } + set_error(zck, "Unsupported hash type: %s", zck_hash_name_from_type(h)); + return false; +} + +void hash_close(zckHash *hash) { + if(!hash) + return; + + if(hash->ctx) { + free(hash->ctx); + hash->ctx = NULL; + } + hash->type = NULL; + return; +} + +void hash_reset(zckHashType *ht) { + memset(ht, 0, sizeof(zckHashType)); + return; +} + +bool hash_init(zckCtx *zck, zckHash *hash, zckHashType *hash_type) { + hash_close(hash); + if(hash == NULL || hash_type == NULL) { + set_error(zck, "Either zckHash or zckHashType struct is null"); + return false; + } + if(hash_type->type == ZCK_HASH_SHA1) { + zck_log(ZCK_LOG_DDEBUG, "Initializing SHA-1 hash"); + hash->ctx = zmalloc(sizeof(SHA_CTX)); + hash->type = hash_type; + SHA1_Init((SHA_CTX *) hash->ctx); + return true; + } else if(hash_type->type == ZCK_HASH_SHA256) { + zck_log(ZCK_LOG_DDEBUG, "Initializing SHA-256 hash"); + hash->ctx = zmalloc(sizeof(SHA256_CTX)); + hash->type = hash_type; + SHA256_Init((SHA256_CTX *) hash->ctx); + return true; + } else if(hash_type->type >= ZCK_HASH_SHA512 && + hash_type->type <= ZCK_HASH_SHA512_128) { + zck_log(ZCK_LOG_DDEBUG, "Initializing SHA-512 hash"); + hash->ctx = zmalloc(sizeof(SHA512_CTX)); + hash->type = hash_type; + SHA512_Init((SHA512_CTX *) hash->ctx); + return true; + } + set_error(zck, "Unsupported hash type: %s", + zck_hash_name_from_type(hash_type->type)); + return false; +} + +bool hash_update(zckCtx *zck, zckHash *hash, const char *message, + const size_t size) { + if(message == NULL && size == 0) + return true; + if(message == NULL) { + set_error(zck, + "Hash data is supposed to have %lu bytes, but is NULL", size); + return false; + } + if(size == 0) { + set_error(zck, + "Hash data is supposed to be 0-length, but is not NULL"); + return false; + } + if(hash && hash->ctx && hash->type) { + if(hash->type->type == ZCK_HASH_SHA1) { + SHA1_Update((SHA_CTX *)hash->ctx, (const sha1_byte *)message, size); + return true; + } else if(hash->type->type == ZCK_HASH_SHA256) { + SHA256_Update((SHA256_CTX *)hash->ctx, + (const unsigned char *)message, size); + return true; + } else if(hash->type->type >= ZCK_HASH_SHA512 && + hash->type->type <= ZCK_HASH_SHA512_128) { + SHA512_Update((SHA512_CTX *)hash->ctx, + (const unsigned char *)message, size); + return true; + } + set_error(zck, "Unsupported hash type: %s", + zck_hash_name_from_type(hash->type->type)); + + return false; + } + set_error(zck, "Hash hasn't been initialized"); + return false; +} + +char *hash_finalize(zckCtx *zck, zckHash *hash) { + if(!hash || !hash->ctx || !hash->type) { + set_error(zck, "Hash hasn't been initialized"); + hash_close(hash); + return NULL; + } + if(hash->type->type == ZCK_HASH_SHA1) { + unsigned char *digest = zmalloc(SHA1_DIGEST_LENGTH); + SHA1_Final((sha1_byte*)digest, (SHA_CTX *)hash->ctx); + hash_close(hash); + return (char *)digest; + } else if(hash->type->type == ZCK_HASH_SHA256) { + unsigned char *digest = zmalloc(SHA256_DIGEST_SIZE); + SHA256_Final(digest, (SHA256_CTX *)hash->ctx); + hash_close(hash); + return (char *)digest; + } else if(hash->type->type >= ZCK_HASH_SHA512 && + hash->type->type <= ZCK_HASH_SHA512_128) { + unsigned char *digest = zmalloc(SHA512_DIGEST_SIZE); + SHA512_Final(digest, (SHA512_CTX *)hash->ctx); + hash_close(hash); + return (char *)digest; + } + set_error(zck, "Unsupported hash type: %s", + zck_hash_name_from_type(hash->type->type)); + hash_close(hash); + return NULL; +} + +bool set_full_hash_type(zckCtx *zck, int hash_type) { + VALIDATE_BOOL(zck); + + zck_log(ZCK_LOG_INFO, "Setting full hash to %s", + zck_hash_name_from_type(hash_type)); + if(!hash_setup(zck, &(zck->hash_type), hash_type)) { + set_error(zck, "Unable to set full hash"); + return false; + } + if(!hash_init(zck, &(zck->full_hash), &(zck->hash_type))) { + set_error(zck, "Unable initialize full hash"); + return false; + } + return true; +} + +bool set_chunk_hash_type(zckCtx *zck, int hash_type) { + VALIDATE_BOOL(zck); + + memset(&(zck->chunk_hash_type), 0, sizeof(zckHashType)); + zck_log(ZCK_LOG_DEBUG, "Setting chunk hash to %s", + zck_hash_name_from_type(hash_type)); + if(!hash_setup(zck, &(zck->chunk_hash_type), hash_type)) { + set_error(zck, "Unable to set chunk hash"); + return false; + } + zck->index.hash_type = zck->chunk_hash_type.type; + zck->index.digest_size = zck->chunk_hash_type.digest_size; + return true; +} + +/* Validate chunk, returning -1 if checksum fails, 1 if good, 0 if error */ +int validate_chunk(zckChunk *idx, zck_log_type bad_checksum) { + zckCtx *zck = NULL; + if(idx && idx->zck) { + VALIDATE_INT(idx->zck); + zck = idx->zck; + } + ALLOCD_INT(zck, idx); + + char *digest = hash_finalize(zck, &(zck->check_chunk_hash)); + if(digest == NULL) { + set_error(zck, "Unable to calculate chunk checksum"); + idx->valid = 0; + return 0; + } + if(idx->comp_length == 0) + memset(digest, 0, idx->digest_size); + char *pdigest = zck_get_chunk_digest(idx); + zck_log(ZCK_LOG_DDEBUG, "Expected chunk checksum: %s", pdigest); + free(pdigest); + pdigest = get_digest_string(digest, idx->digest_size); + zck_log(ZCK_LOG_DDEBUG, "Calculated chunk checksum: %s", pdigest); + free(pdigest); + if(memcmp(digest, idx->digest, idx->digest_size) != 0) { + free(digest); + if(idx->number == -1) + zck_log(bad_checksum, "Chunk checksum: FAILED!"); + else + zck_log(bad_checksum, "Chunk %i's checksum: FAILED", + idx->number); + idx->valid = -1; + return -1; + } + if(idx->number == -1) + zck_log(ZCK_LOG_DEBUG, "Chunk checksum: valid"); + else + zck_log(ZCK_LOG_DEBUG, "Chunk %i's checksum: valid", idx->number); + free(digest); + idx->valid = 1; + return 1; +} + +int validate_current_chunk(zckCtx *zck) { + VALIDATE_BOOL(zck); + + return validate_chunk(zck->comp.data_idx, ZCK_LOG_ERROR); +} + +int validate_file(zckCtx *zck, zck_log_type bad_checksums) { + VALIDATE_BOOL(zck); + char *digest = hash_finalize(zck, &(zck->check_full_hash)); + if(digest == NULL) { + set_error(zck, "Unable to calculate full file checksum"); + return 0; + } + zck_log(ZCK_LOG_DEBUG, "Checking data checksum"); + char *cks = get_digest_string(zck->full_hash_digest, + zck->hash_type.digest_size); + zck_log(ZCK_LOG_DEBUG, "Expected data checksum: %s", cks); + free(cks); + cks = get_digest_string(digest, zck->hash_type.digest_size); + zck_log(ZCK_LOG_DEBUG, "Calculated data checksum: %s", cks); + free(cks); + if(memcmp(digest, zck->full_hash_digest, zck->hash_type.digest_size) != 0) { + free(digest); + zck_log(bad_checksums, "Data checksum failed!"); + return -1; + } + zck_log(ZCK_LOG_DEBUG, "Data checksum valid"); + free(digest); + return 1; +} + +int validate_header(zckCtx *zck) { + VALIDATE_BOOL(zck); + + char *digest = hash_finalize(zck, &(zck->check_full_hash)); + if(digest == NULL) { + set_error(zck, "Unable to calculate header checksum"); + return 0; + } + zck_log(ZCK_LOG_DEBUG, "Checking header checksum"); + char *cks = get_digest_string(zck->header_digest, + zck->hash_type.digest_size); + zck_log(ZCK_LOG_DEBUG, "Expected header checksum: %s", cks); + free(cks); + cks = get_digest_string(digest, zck->hash_type.digest_size); + zck_log(ZCK_LOG_DEBUG, "Calculated header checksum: %s", cks); + free(cks); + if(memcmp(digest, zck->header_digest, zck->hash_type.digest_size) != 0) { + free(digest); + zck_log(ZCK_LOG_INFO, "Header checksum failed!"); + return -1; + } + zck_log(ZCK_LOG_DEBUG, "Header checksum valid"); + free(digest); + + if(!hash_init(zck, &(zck->check_full_hash), &(zck->hash_type))) + return 0; + + return 1; +} + +/* Returns 1 if data hash matches, -1 if it doesn't and 0 if error */ +int PUBLIC zck_validate_data_checksum(zckCtx *zck) { + VALIDATE_READ_BOOL(zck); + + if(!seek_data(zck, zck->data_offset, SEEK_SET)) + return 0; + if(!hash_init(zck, &(zck->check_full_hash), &(zck->hash_type))) + return 0; + char buf[BUF_SIZE] = {0}; + zckChunk *idx = zck->index.first; + zck_log(ZCK_LOG_DEBUG, "Checking full hash"); + while(idx) { + size_t to_read = idx->comp_length; + while(to_read > 0) { + size_t rb = BUF_SIZE; + if(rb > to_read) + rb = to_read; + if(!read_data(zck, buf, rb)) + return 0; + if(!hash_update(zck, &(zck->check_full_hash), buf, rb)) + return 0; + to_read -= rb; + } + idx = idx->next; + } + int ret = validate_file(zck, ZCK_LOG_WARNING); + if(!seek_data(zck, zck->data_offset, SEEK_SET)) + return 0; + if(!hash_init(zck, &(zck->check_full_hash), &(zck->hash_type))) + return 0; + return ret; +} + +const char PUBLIC *zck_hash_name_from_type(int hash_type) { + if(hash_type >= ZCK_HASH_UNKNOWN || hash_type < 0) { + snprintf(unknown+8, 21, "%i)", hash_type); + return unknown; + } + return HASH_NAME[hash_type]; +} + +int PUBLIC zck_get_full_hash_type(zckCtx *zck) { + VALIDATE_INT(zck); + + return zck->hash_type.type; +} + +ssize_t PUBLIC zck_get_full_digest_size(zckCtx *zck) { + VALIDATE_INT(zck); + + return zck->hash_type.digest_size; +} + +int PUBLIC zck_get_chunk_hash_type(zckCtx *zck) { + VALIDATE_INT(zck); + + return zck->index.hash_type; +} + +ssize_t PUBLIC zck_get_chunk_digest_size(zckCtx *zck) { + VALIDATE_INT(zck); + + return zck->index.digest_size; +} + +char PUBLIC *zck_get_header_digest(zckCtx *zck) { + VALIDATE_PTR(zck); + + return get_digest_string(zck->header_digest, zck->hash_type.digest_size); +} + +char PUBLIC *zck_get_data_digest(zckCtx *zck) { + VALIDATE_PTR(zck); + + return get_digest_string(zck->full_hash_digest, zck->hash_type.digest_size); +} + +char PUBLIC *zck_get_chunk_digest(zckChunk *item) { + if(item == NULL) + return NULL; + return get_digest_string(item->digest, item->digest_size); +} + +/* Returns 1 if all chunks are valid, -1 if even one isn't and 0 if error */ +int PUBLIC zck_find_valid_chunks(zckCtx *zck) { + VALIDATE_READ_BOOL(zck); + + return validate_checksums(zck, ZCK_LOG_DEBUG); +} + +/* Returns 1 if all checksums matched, -1 if even one doesn't and 0 if error */ +int PUBLIC zck_validate_checksums(zckCtx *zck) { + VALIDATE_READ_BOOL(zck); + + return validate_checksums(zck, ZCK_LOG_WARNING); +} diff --git a/src/lib/hash/meson.build b/src/lib/hash/meson.build new file mode 100644 index 0000000..9edc4da --- /dev/null +++ b/src/lib/hash/meson.build @@ -0,0 +1,5 @@ +lib_sources += files('hash.c') +if not openssl_dep.found() + subdir('sha1') + subdir('sha2') +endif diff --git a/src/lib/hash/sha1/meson.build b/src/lib/hash/sha1/meson.build new file mode 100644 index 0000000..cb912d4 --- /dev/null +++ b/src/lib/hash/sha1/meson.build @@ -0,0 +1 @@ +lib_sources += files('sha1.c') diff --git a/src/lib/hash/sha1/sha1.c b/src/lib/hash/sha1/sha1.c new file mode 100644 index 0000000..e34de61 --- /dev/null +++ b/src/lib/hash/sha1/sha1.c @@ -0,0 +1,157 @@ +/* + * sha1.c + * + * Originally witten by Steve Reid + * + * Modified by Aaron D. Gifford + * + * NO COPYRIGHT - THIS IS 100% IN THE PUBLIC DOMAIN + * + * The original unmodified version is available at: + * ftp://ftp.funet.fi/pub/crypt/hash/sha/sha1.c + * + * THIS SOFTWARE IS PROVIDED BY THE AUTHOR(S) AND CONTRIBUTORS ``AS IS'' AND + * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE + * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE + * ARE DISCLAIMED. IN NO EVENT SHALL THE AUTHOR(S) OR CONTRIBUTORS BE LIABLE + * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL + * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS + * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) + * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT + * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY + * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF + * SUCH DAMAGE. + */ + +#include +#include +#include "sha1.h" + +#define rol(value, bits) (((value) << (bits)) | ((value) >> (32 - (bits)))) + +/* blk0() and blk() perform the initial expand. */ +/* I got the idea of expanding during the round function from SSLeay */ + +#ifdef LITTLE_ENDIAN +#define blk0(i) (block->l[i] = (rol(block->l[i],24)&(sha1_quadbyte)0xFF00FF00) \ + |(rol(block->l[i],8)&(sha1_quadbyte)0x00FF00FF)) +#else +#define blk0(i) block->l[i] +#endif + +#define blk(i) (block->l[i&15] = rol(block->l[(i+13)&15]^block->l[(i+8)&15] \ + ^block->l[(i+2)&15]^block->l[i&15],1)) + +/* (R0+R1), R2, R3, R4 are the different operations used in SHA1 */ +#define R0(v,w,x,y,z,i) z+=((w&(x^y))^y)+blk0(i)+0x5A827999+rol(v,5);w=rol(w,30); +#define R1(v,w,x,y,z,i) z+=((w&(x^y))^y)+blk(i)+0x5A827999+rol(v,5);w=rol(w,30); +#define R2(v,w,x,y,z,i) z+=(w^x^y)+blk(i)+0x6ED9EBA1+rol(v,5);w=rol(w,30); +#define R3(v,w,x,y,z,i) z+=(((w|x)&y)|(w&x))+blk(i)+0x8F1BBCDC+rol(v,5);w=rol(w,30); +#define R4(v,w,x,y,z,i) z+=(w^x^y)+blk(i)+0xCA62C1D6+rol(v,5);w=rol(w,30); + +typedef union _BYTE64QUAD16 { + sha1_byte c[64]; + sha1_quadbyte l[16]; +} BYTE64QUAD16; + +/* Hash a single 512-bit block. This is the core of the algorithm. */ +void SHA1_Transform(sha1_quadbyte state[5], const sha1_byte buffer[64]) { + sha1_quadbyte a, b, c, d, e; + BYTE64QUAD16 block[64]; + + memcpy(block, buffer, 64); + /* Copy context->state[] to working vars */ + a = state[0]; + b = state[1]; + c = state[2]; + d = state[3]; + e = state[4]; + /* 4 rounds of 20 operations each. Loop unrolled. */ + R0(a,b,c,d,e, 0); R0(e,a,b,c,d, 1); R0(d,e,a,b,c, 2); R0(c,d,e,a,b, 3); + R0(b,c,d,e,a, 4); R0(a,b,c,d,e, 5); R0(e,a,b,c,d, 6); R0(d,e,a,b,c, 7); + R0(c,d,e,a,b, 8); R0(b,c,d,e,a, 9); R0(a,b,c,d,e,10); R0(e,a,b,c,d,11); + R0(d,e,a,b,c,12); R0(c,d,e,a,b,13); R0(b,c,d,e,a,14); R0(a,b,c,d,e,15); + R1(e,a,b,c,d,16); R1(d,e,a,b,c,17); R1(c,d,e,a,b,18); R1(b,c,d,e,a,19); + R2(a,b,c,d,e,20); R2(e,a,b,c,d,21); R2(d,e,a,b,c,22); R2(c,d,e,a,b,23); + R2(b,c,d,e,a,24); R2(a,b,c,d,e,25); R2(e,a,b,c,d,26); R2(d,e,a,b,c,27); + R2(c,d,e,a,b,28); R2(b,c,d,e,a,29); R2(a,b,c,d,e,30); R2(e,a,b,c,d,31); + R2(d,e,a,b,c,32); R2(c,d,e,a,b,33); R2(b,c,d,e,a,34); R2(a,b,c,d,e,35); + R2(e,a,b,c,d,36); R2(d,e,a,b,c,37); R2(c,d,e,a,b,38); R2(b,c,d,e,a,39); + R3(a,b,c,d,e,40); R3(e,a,b,c,d,41); R3(d,e,a,b,c,42); R3(c,d,e,a,b,43); + R3(b,c,d,e,a,44); R3(a,b,c,d,e,45); R3(e,a,b,c,d,46); R3(d,e,a,b,c,47); + R3(c,d,e,a,b,48); R3(b,c,d,e,a,49); R3(a,b,c,d,e,50); R3(e,a,b,c,d,51); + R3(d,e,a,b,c,52); R3(c,d,e,a,b,53); R3(b,c,d,e,a,54); R3(a,b,c,d,e,55); + R3(e,a,b,c,d,56); R3(d,e,a,b,c,57); R3(c,d,e,a,b,58); R3(b,c,d,e,a,59); + R4(a,b,c,d,e,60); R4(e,a,b,c,d,61); R4(d,e,a,b,c,62); R4(c,d,e,a,b,63); + R4(b,c,d,e,a,64); R4(a,b,c,d,e,65); R4(e,a,b,c,d,66); R4(d,e,a,b,c,67); + R4(c,d,e,a,b,68); R4(b,c,d,e,a,69); R4(a,b,c,d,e,70); R4(e,a,b,c,d,71); + R4(d,e,a,b,c,72); R4(c,d,e,a,b,73); R4(b,c,d,e,a,74); R4(a,b,c,d,e,75); + R4(e,a,b,c,d,76); R4(d,e,a,b,c,77); R4(c,d,e,a,b,78); R4(b,c,d,e,a,79); + /* Add the working vars back into context.state[] */ + state[0] += a; + state[1] += b; + state[2] += c; + state[3] += d; + state[4] += e; + /* Wipe variables */ + a = b = c = d = e = 0; +} + + +/* SHA1_Init - Initialize new context */ +void SHA1_Init(SHA_CTX* context) { + /* SHA1 initialization constants */ + context->state[0] = 0x67452301; + context->state[1] = 0xEFCDAB89; + context->state[2] = 0x98BADCFE; + context->state[3] = 0x10325476; + context->state[4] = 0xC3D2E1F0; + context->count[0] = context->count[1] = 0; +} + +/* Run your data through this. */ +void SHA1_Update(SHA_CTX *context, const sha1_byte *data, unsigned int len) { + unsigned int i, j; + j = (context->count[0] >> 3) & 63; + if ((context->count[0] += len << 3) < (len << 3)) context->count[1]++; + context->count[1] += (len >> 29); + if ((j + len) > 63) { + memcpy(&context->buffer[j], data, (i = 64-j)); + SHA1_Transform(context->state, context->buffer); + for ( ; i + 63 < len; i += 64) { + SHA1_Transform(context->state, &data[i]); + } + j = 0; + } + else i = 0; + memcpy(&context->buffer[j], &data[i], len - i); +} + + +/* Add padding and return the message digest. */ +void SHA1_Final(sha1_byte digest[SHA1_DIGEST_LENGTH], SHA_CTX *context) { + sha1_quadbyte i, j; + sha1_byte finalcount[8]; + + for (i = 0; i < 8; i++) { + finalcount[i] = (sha1_byte)((context->count[(i >= 4 ? 0 : 1)] + >> ((3-(i & 3)) * 8) ) & 255); /* Endian independent */ + } + SHA1_Update(context, (sha1_byte *)"\200", 1); + while ((context->count[0] & 504) != 448) { + SHA1_Update(context, (sha1_byte *)"\0", 1); + } + /* Should cause a SHA1_Transform() */ + SHA1_Update(context, finalcount, 8); + for (i = 0; i < SHA1_DIGEST_LENGTH; i++) { + digest[i] = (sha1_byte) + ((context->state[i>>2] >> ((3-(i & 3)) * 8) ) & 255); + } + /* Wipe variables */ + i = j = 0; + memset(context->buffer, 0, SHA1_BLOCK_LENGTH); + memset(context->state, 0, SHA1_DIGEST_LENGTH); + memset(context->count, 0, 8); + memset(&finalcount, 0, 8); +} + diff --git a/src/lib/hash/sha1/sha1.h b/src/lib/hash/sha1/sha1.h new file mode 100644 index 0000000..300a466 --- /dev/null +++ b/src/lib/hash/sha1/sha1.h @@ -0,0 +1,62 @@ +/* + * sha.h + * + * Originally taken from the public domain SHA1 implementation + * written by by Steve Reid + * + * Modified by Aaron D. Gifford + * + * NO COPYRIGHT - THIS IS 100% IN THE PUBLIC DOMAIN + * + * The original unmodified version is available at: + * ftp://ftp.funet.fi/pub/crypt/hash/sha/sha1.c + * + * THIS SOFTWARE IS PROVIDED BY THE AUTHOR(S) AND CONTRIBUTORS ``AS IS'' AND + * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE + * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE + * ARE DISCLAIMED. IN NO EVENT SHALL THE AUTHOR(S) OR CONTRIBUTORS BE LIABLE + * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL + * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS + * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) + * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT + * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY + * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF + * SUCH DAMAGE. + */ + +#ifndef __SHA1_H__ +#define __SHA1_H__ + +#include + +#if __BYTE_ORDER == __LITTLE_ENDIAN && !defined(LITTLE_ENDIAN) +#define LITTLE_ENDIAN +#endif + +/* Make sure you define these types for your architecture: */ +typedef uint32_t sha1_quadbyte; /* 4 byte type */ +typedef char sha1_byte; /* single byte type */ + +/* + * Be sure to get the above definitions right. For instance, on my + * x86 based FreeBSD box, I define LITTLE_ENDIAN and use the type + * "unsigned long" for the quadbyte. On FreeBSD on the Alpha, however, + * while I still use LITTLE_ENDIAN, I must define the quadbyte type + * as "unsigned int" instead. + */ + +#define SHA1_BLOCK_LENGTH 64 +#define SHA1_DIGEST_LENGTH 20 + +/* The SHA1 structure: */ +typedef struct _SHA_CTX { + sha1_quadbyte state[5]; + sha1_quadbyte count[2]; + sha1_byte buffer[SHA1_BLOCK_LENGTH]; +} SHA_CTX; + +void SHA1_Init(SHA_CTX *context); +void SHA1_Update(SHA_CTX *context, const sha1_byte *data, unsigned int len); +void SHA1_Final(sha1_byte digest[SHA1_DIGEST_LENGTH], SHA_CTX* context); + +#endif diff --git a/src/lib/hash/sha2/meson.build b/src/lib/hash/sha2/meson.build new file mode 100644 index 0000000..172caa9 --- /dev/null +++ b/src/lib/hash/sha2/meson.build @@ -0,0 +1 @@ +lib_sources += files('sha2.c') diff --git a/src/lib/hash/sha2/sha2.c b/src/lib/hash/sha2/sha2.c new file mode 100644 index 0000000..0fe4c37 --- /dev/null +++ b/src/lib/hash/sha2/sha2.c @@ -0,0 +1,949 @@ +/* + * FIPS 180-2 SHA-224/256/384/512 implementation + * Last update: 02/02/2007 + * Issue date: 04/30/2005 + * + * Copyright (C) 2005, 2007 Olivier Gay + * All rights reserved. + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions + * are met: + * 1. Redistributions of source code must retain the above copyright + * notice, this list of conditions and the following disclaimer. + * 2. Redistributions in binary form must reproduce the above copyright + * notice, this list of conditions and the following disclaimer in the + * documentation and/or other materials provided with the distribution. + * 3. Neither the name of the project nor the names of its contributors + * may be used to endorse or promote products derived from this software + * without specific prior written permission. + * + * THIS SOFTWARE IS PROVIDED BY THE PROJECT AND CONTRIBUTORS ``AS IS'' AND + * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE + * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE + * ARE DISCLAIMED. IN NO EVENT SHALL THE PROJECT OR CONTRIBUTORS BE LIABLE + * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL + * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS + * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) + * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT + * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY + * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF + * SUCH DAMAGE. + */ + +#if 0 +#define UNROLL_LOOPS /* Enable loops unrolling */ +#endif + +#include + +#include "sha2.h" + +#define SHFR(x, n) (x >> n) +#define ROTR(x, n) ((x >> n) | (x << ((sizeof(x) << 3) - n))) +#define ROTL(x, n) ((x << n) | (x >> ((sizeof(x) << 3) - n))) +#define CH(x, y, z) ((x & y) ^ (~x & z)) +#define MAJ(x, y, z) ((x & y) ^ (x & z) ^ (y & z)) + +#define SHA256_F1(x) (ROTR(x, 2) ^ ROTR(x, 13) ^ ROTR(x, 22)) +#define SHA256_F2(x) (ROTR(x, 6) ^ ROTR(x, 11) ^ ROTR(x, 25)) +#define SHA256_F3(x) (ROTR(x, 7) ^ ROTR(x, 18) ^ SHFR(x, 3)) +#define SHA256_F4(x) (ROTR(x, 17) ^ ROTR(x, 19) ^ SHFR(x, 10)) + +#define SHA512_F1(x) (ROTR(x, 28) ^ ROTR(x, 34) ^ ROTR(x, 39)) +#define SHA512_F2(x) (ROTR(x, 14) ^ ROTR(x, 18) ^ ROTR(x, 41)) +#define SHA512_F3(x) (ROTR(x, 1) ^ ROTR(x, 8) ^ SHFR(x, 7)) +#define SHA512_F4(x) (ROTR(x, 19) ^ ROTR(x, 61) ^ SHFR(x, 6)) + +#define UNPACK32(x, str) \ +{ \ + *((str) + 3) = (uint8) ((x) ); \ + *((str) + 2) = (uint8) ((x) >> 8); \ + *((str) + 1) = (uint8) ((x) >> 16); \ + *((str) + 0) = (uint8) ((x) >> 24); \ +} + +#define PACK32(str, x) \ +{ \ + *(x) = ((uint32) *((str) + 3) ) \ + | ((uint32) *((str) + 2) << 8) \ + | ((uint32) *((str) + 1) << 16) \ + | ((uint32) *((str) + 0) << 24); \ +} + +#define UNPACK64(x, str) \ +{ \ + *((str) + 7) = (uint8) ((x) ); \ + *((str) + 6) = (uint8) ((x) >> 8); \ + *((str) + 5) = (uint8) ((x) >> 16); \ + *((str) + 4) = (uint8) ((x) >> 24); \ + *((str) + 3) = (uint8) ((x) >> 32); \ + *((str) + 2) = (uint8) ((x) >> 40); \ + *((str) + 1) = (uint8) ((x) >> 48); \ + *((str) + 0) = (uint8) ((x) >> 56); \ +} + +#define PACK64(str, x) \ +{ \ + *(x) = ((uint64) *((str) + 7) ) \ + | ((uint64) *((str) + 6) << 8) \ + | ((uint64) *((str) + 5) << 16) \ + | ((uint64) *((str) + 4) << 24) \ + | ((uint64) *((str) + 3) << 32) \ + | ((uint64) *((str) + 2) << 40) \ + | ((uint64) *((str) + 1) << 48) \ + | ((uint64) *((str) + 0) << 56); \ +} + +/* Macros used for loops unrolling */ + +#define SHA256_SCR(i) \ +{ \ + w[i] = SHA256_F4(w[i - 2]) + w[i - 7] \ + + SHA256_F3(w[i - 15]) + w[i - 16]; \ +} + +#define SHA512_SCR(i) \ +{ \ + w[i] = SHA512_F4(w[i - 2]) + w[i - 7] \ + + SHA512_F3(w[i - 15]) + w[i - 16]; \ +} + +#define SHA256_EXP(a, b, c, d, e, f, g, h, j) \ +{ \ + t1 = wv[h] + SHA256_F2(wv[e]) + CH(wv[e], wv[f], wv[g]) \ + + sha256_k[j] + w[j]; \ + t2 = SHA256_F1(wv[a]) + MAJ(wv[a], wv[b], wv[c]); \ + wv[d] += t1; \ + wv[h] = t1 + t2; \ +} + +#define SHA512_EXP(a, b, c, d, e, f, g ,h, j) \ +{ \ + t1 = wv[h] + SHA512_F2(wv[e]) + CH(wv[e], wv[f], wv[g]) \ + + sha512_k[j] + w[j]; \ + t2 = SHA512_F1(wv[a]) + MAJ(wv[a], wv[b], wv[c]); \ + wv[d] += t1; \ + wv[h] = t1 + t2; \ +} + +uint32 sha224_h0[8] = + {0xc1059ed8, 0x367cd507, 0x3070dd17, 0xf70e5939, + 0xffc00b31, 0x68581511, 0x64f98fa7, 0xbefa4fa4}; + +uint32 sha256_h0[8] = + {0x6a09e667, 0xbb67ae85, 0x3c6ef372, 0xa54ff53a, + 0x510e527f, 0x9b05688c, 0x1f83d9ab, 0x5be0cd19}; + +uint64 sha384_h0[8] = + {0xcbbb9d5dc1059ed8ULL, 0x629a292a367cd507ULL, + 0x9159015a3070dd17ULL, 0x152fecd8f70e5939ULL, + 0x67332667ffc00b31ULL, 0x8eb44a8768581511ULL, + 0xdb0c2e0d64f98fa7ULL, 0x47b5481dbefa4fa4ULL}; + +uint64 sha512_h0[8] = + {0x6a09e667f3bcc908ULL, 0xbb67ae8584caa73bULL, + 0x3c6ef372fe94f82bULL, 0xa54ff53a5f1d36f1ULL, + 0x510e527fade682d1ULL, 0x9b05688c2b3e6c1fULL, + 0x1f83d9abfb41bd6bULL, 0x5be0cd19137e2179ULL}; + +uint32 sha256_k[64] = + {0x428a2f98, 0x71374491, 0xb5c0fbcf, 0xe9b5dba5, + 0x3956c25b, 0x59f111f1, 0x923f82a4, 0xab1c5ed5, + 0xd807aa98, 0x12835b01, 0x243185be, 0x550c7dc3, + 0x72be5d74, 0x80deb1fe, 0x9bdc06a7, 0xc19bf174, + 0xe49b69c1, 0xefbe4786, 0x0fc19dc6, 0x240ca1cc, + 0x2de92c6f, 0x4a7484aa, 0x5cb0a9dc, 0x76f988da, + 0x983e5152, 0xa831c66d, 0xb00327c8, 0xbf597fc7, + 0xc6e00bf3, 0xd5a79147, 0x06ca6351, 0x14292967, + 0x27b70a85, 0x2e1b2138, 0x4d2c6dfc, 0x53380d13, + 0x650a7354, 0x766a0abb, 0x81c2c92e, 0x92722c85, + 0xa2bfe8a1, 0xa81a664b, 0xc24b8b70, 0xc76c51a3, + 0xd192e819, 0xd6990624, 0xf40e3585, 0x106aa070, + 0x19a4c116, 0x1e376c08, 0x2748774c, 0x34b0bcb5, + 0x391c0cb3, 0x4ed8aa4a, 0x5b9cca4f, 0x682e6ff3, + 0x748f82ee, 0x78a5636f, 0x84c87814, 0x8cc70208, + 0x90befffa, 0xa4506ceb, 0xbef9a3f7, 0xc67178f2}; + +uint64 sha512_k[80] = + {0x428a2f98d728ae22ULL, 0x7137449123ef65cdULL, + 0xb5c0fbcfec4d3b2fULL, 0xe9b5dba58189dbbcULL, + 0x3956c25bf348b538ULL, 0x59f111f1b605d019ULL, + 0x923f82a4af194f9bULL, 0xab1c5ed5da6d8118ULL, + 0xd807aa98a3030242ULL, 0x12835b0145706fbeULL, + 0x243185be4ee4b28cULL, 0x550c7dc3d5ffb4e2ULL, + 0x72be5d74f27b896fULL, 0x80deb1fe3b1696b1ULL, + 0x9bdc06a725c71235ULL, 0xc19bf174cf692694ULL, + 0xe49b69c19ef14ad2ULL, 0xefbe4786384f25e3ULL, + 0x0fc19dc68b8cd5b5ULL, 0x240ca1cc77ac9c65ULL, + 0x2de92c6f592b0275ULL, 0x4a7484aa6ea6e483ULL, + 0x5cb0a9dcbd41fbd4ULL, 0x76f988da831153b5ULL, + 0x983e5152ee66dfabULL, 0xa831c66d2db43210ULL, + 0xb00327c898fb213fULL, 0xbf597fc7beef0ee4ULL, + 0xc6e00bf33da88fc2ULL, 0xd5a79147930aa725ULL, + 0x06ca6351e003826fULL, 0x142929670a0e6e70ULL, + 0x27b70a8546d22ffcULL, 0x2e1b21385c26c926ULL, + 0x4d2c6dfc5ac42aedULL, 0x53380d139d95b3dfULL, + 0x650a73548baf63deULL, 0x766a0abb3c77b2a8ULL, + 0x81c2c92e47edaee6ULL, 0x92722c851482353bULL, + 0xa2bfe8a14cf10364ULL, 0xa81a664bbc423001ULL, + 0xc24b8b70d0f89791ULL, 0xc76c51a30654be30ULL, + 0xd192e819d6ef5218ULL, 0xd69906245565a910ULL, + 0xf40e35855771202aULL, 0x106aa07032bbd1b8ULL, + 0x19a4c116b8d2d0c8ULL, 0x1e376c085141ab53ULL, + 0x2748774cdf8eeb99ULL, 0x34b0bcb5e19b48a8ULL, + 0x391c0cb3c5c95a63ULL, 0x4ed8aa4ae3418acbULL, + 0x5b9cca4f7763e373ULL, 0x682e6ff3d6b2b8a3ULL, + 0x748f82ee5defb2fcULL, 0x78a5636f43172f60ULL, + 0x84c87814a1f0ab72ULL, 0x8cc702081a6439ecULL, + 0x90befffa23631e28ULL, 0xa4506cebde82bde9ULL, + 0xbef9a3f7b2c67915ULL, 0xc67178f2e372532bULL, + 0xca273eceea26619cULL, 0xd186b8c721c0c207ULL, + 0xeada7dd6cde0eb1eULL, 0xf57d4f7fee6ed178ULL, + 0x06f067aa72176fbaULL, 0x0a637dc5a2c898a6ULL, + 0x113f9804bef90daeULL, 0x1b710b35131c471bULL, + 0x28db77f523047d84ULL, 0x32caab7b40c72493ULL, + 0x3c9ebe0a15c9bebcULL, 0x431d67c49c100d4cULL, + 0x4cc5d4becb3e42b6ULL, 0x597f299cfc657e2aULL, + 0x5fcb6fab3ad6faecULL, 0x6c44198c4a475817ULL}; + +/* SHA-256 functions */ + +void sha256_transf(sha256_ctx *ctx, const unsigned char *message, + unsigned int block_nb) +{ + uint32 w[64]; + uint32 wv[8]; + uint32 t1, t2; + const unsigned char *sub_block; + int i; + +#ifndef UNROLL_LOOPS + int j; +#endif + + for (i = 0; i < (int) block_nb; i++) { + sub_block = message + (i << 6); + +#ifndef UNROLL_LOOPS + for (j = 0; j < 16; j++) { + PACK32(&sub_block[j << 2], &w[j]); + } + + for (j = 16; j < 64; j++) { + SHA256_SCR(j); + } + + for (j = 0; j < 8; j++) { + wv[j] = ctx->h[j]; + } + + for (j = 0; j < 64; j++) { + t1 = wv[7] + SHA256_F2(wv[4]) + CH(wv[4], wv[5], wv[6]) + + sha256_k[j] + w[j]; + t2 = SHA256_F1(wv[0]) + MAJ(wv[0], wv[1], wv[2]); + wv[7] = wv[6]; + wv[6] = wv[5]; + wv[5] = wv[4]; + wv[4] = wv[3] + t1; + wv[3] = wv[2]; + wv[2] = wv[1]; + wv[1] = wv[0]; + wv[0] = t1 + t2; + } + + for (j = 0; j < 8; j++) { + ctx->h[j] += wv[j]; + } +#else + PACK32(&sub_block[ 0], &w[ 0]); PACK32(&sub_block[ 4], &w[ 1]); + PACK32(&sub_block[ 8], &w[ 2]); PACK32(&sub_block[12], &w[ 3]); + PACK32(&sub_block[16], &w[ 4]); PACK32(&sub_block[20], &w[ 5]); + PACK32(&sub_block[24], &w[ 6]); PACK32(&sub_block[28], &w[ 7]); + PACK32(&sub_block[32], &w[ 8]); PACK32(&sub_block[36], &w[ 9]); + PACK32(&sub_block[40], &w[10]); PACK32(&sub_block[44], &w[11]); + PACK32(&sub_block[48], &w[12]); PACK32(&sub_block[52], &w[13]); + PACK32(&sub_block[56], &w[14]); PACK32(&sub_block[60], &w[15]); + + SHA256_SCR(16); SHA256_SCR(17); SHA256_SCR(18); SHA256_SCR(19); + SHA256_SCR(20); SHA256_SCR(21); SHA256_SCR(22); SHA256_SCR(23); + SHA256_SCR(24); SHA256_SCR(25); SHA256_SCR(26); SHA256_SCR(27); + SHA256_SCR(28); SHA256_SCR(29); SHA256_SCR(30); SHA256_SCR(31); + SHA256_SCR(32); SHA256_SCR(33); SHA256_SCR(34); SHA256_SCR(35); + SHA256_SCR(36); SHA256_SCR(37); SHA256_SCR(38); SHA256_SCR(39); + SHA256_SCR(40); SHA256_SCR(41); SHA256_SCR(42); SHA256_SCR(43); + SHA256_SCR(44); SHA256_SCR(45); SHA256_SCR(46); SHA256_SCR(47); + SHA256_SCR(48); SHA256_SCR(49); SHA256_SCR(50); SHA256_SCR(51); + SHA256_SCR(52); SHA256_SCR(53); SHA256_SCR(54); SHA256_SCR(55); + SHA256_SCR(56); SHA256_SCR(57); SHA256_SCR(58); SHA256_SCR(59); + SHA256_SCR(60); SHA256_SCR(61); SHA256_SCR(62); SHA256_SCR(63); + + wv[0] = ctx->h[0]; wv[1] = ctx->h[1]; + wv[2] = ctx->h[2]; wv[3] = ctx->h[3]; + wv[4] = ctx->h[4]; wv[5] = ctx->h[5]; + wv[6] = ctx->h[6]; wv[7] = ctx->h[7]; + + SHA256_EXP(0,1,2,3,4,5,6,7, 0); SHA256_EXP(7,0,1,2,3,4,5,6, 1); + SHA256_EXP(6,7,0,1,2,3,4,5, 2); SHA256_EXP(5,6,7,0,1,2,3,4, 3); + SHA256_EXP(4,5,6,7,0,1,2,3, 4); SHA256_EXP(3,4,5,6,7,0,1,2, 5); + SHA256_EXP(2,3,4,5,6,7,0,1, 6); SHA256_EXP(1,2,3,4,5,6,7,0, 7); + SHA256_EXP(0,1,2,3,4,5,6,7, 8); SHA256_EXP(7,0,1,2,3,4,5,6, 9); + SHA256_EXP(6,7,0,1,2,3,4,5,10); SHA256_EXP(5,6,7,0,1,2,3,4,11); + SHA256_EXP(4,5,6,7,0,1,2,3,12); SHA256_EXP(3,4,5,6,7,0,1,2,13); + SHA256_EXP(2,3,4,5,6,7,0,1,14); SHA256_EXP(1,2,3,4,5,6,7,0,15); + SHA256_EXP(0,1,2,3,4,5,6,7,16); SHA256_EXP(7,0,1,2,3,4,5,6,17); + SHA256_EXP(6,7,0,1,2,3,4,5,18); SHA256_EXP(5,6,7,0,1,2,3,4,19); + SHA256_EXP(4,5,6,7,0,1,2,3,20); SHA256_EXP(3,4,5,6,7,0,1,2,21); + SHA256_EXP(2,3,4,5,6,7,0,1,22); SHA256_EXP(1,2,3,4,5,6,7,0,23); + SHA256_EXP(0,1,2,3,4,5,6,7,24); SHA256_EXP(7,0,1,2,3,4,5,6,25); + SHA256_EXP(6,7,0,1,2,3,4,5,26); SHA256_EXP(5,6,7,0,1,2,3,4,27); + SHA256_EXP(4,5,6,7,0,1,2,3,28); SHA256_EXP(3,4,5,6,7,0,1,2,29); + SHA256_EXP(2,3,4,5,6,7,0,1,30); SHA256_EXP(1,2,3,4,5,6,7,0,31); + SHA256_EXP(0,1,2,3,4,5,6,7,32); SHA256_EXP(7,0,1,2,3,4,5,6,33); + SHA256_EXP(6,7,0,1,2,3,4,5,34); SHA256_EXP(5,6,7,0,1,2,3,4,35); + SHA256_EXP(4,5,6,7,0,1,2,3,36); SHA256_EXP(3,4,5,6,7,0,1,2,37); + SHA256_EXP(2,3,4,5,6,7,0,1,38); SHA256_EXP(1,2,3,4,5,6,7,0,39); + SHA256_EXP(0,1,2,3,4,5,6,7,40); SHA256_EXP(7,0,1,2,3,4,5,6,41); + SHA256_EXP(6,7,0,1,2,3,4,5,42); SHA256_EXP(5,6,7,0,1,2,3,4,43); + SHA256_EXP(4,5,6,7,0,1,2,3,44); SHA256_EXP(3,4,5,6,7,0,1,2,45); + SHA256_EXP(2,3,4,5,6,7,0,1,46); SHA256_EXP(1,2,3,4,5,6,7,0,47); + SHA256_EXP(0,1,2,3,4,5,6,7,48); SHA256_EXP(7,0,1,2,3,4,5,6,49); + SHA256_EXP(6,7,0,1,2,3,4,5,50); SHA256_EXP(5,6,7,0,1,2,3,4,51); + SHA256_EXP(4,5,6,7,0,1,2,3,52); SHA256_EXP(3,4,5,6,7,0,1,2,53); + SHA256_EXP(2,3,4,5,6,7,0,1,54); SHA256_EXP(1,2,3,4,5,6,7,0,55); + SHA256_EXP(0,1,2,3,4,5,6,7,56); SHA256_EXP(7,0,1,2,3,4,5,6,57); + SHA256_EXP(6,7,0,1,2,3,4,5,58); SHA256_EXP(5,6,7,0,1,2,3,4,59); + SHA256_EXP(4,5,6,7,0,1,2,3,60); SHA256_EXP(3,4,5,6,7,0,1,2,61); + SHA256_EXP(2,3,4,5,6,7,0,1,62); SHA256_EXP(1,2,3,4,5,6,7,0,63); + + ctx->h[0] += wv[0]; ctx->h[1] += wv[1]; + ctx->h[2] += wv[2]; ctx->h[3] += wv[3]; + ctx->h[4] += wv[4]; ctx->h[5] += wv[5]; + ctx->h[6] += wv[6]; ctx->h[7] += wv[7]; +#endif /* !UNROLL_LOOPS */ + } +} + +void sha256(const unsigned char *message, unsigned int len, unsigned char *digest) +{ + sha256_ctx ctx; + + sha256_init(&ctx); + sha256_update(&ctx, message, len); + sha256_final(&ctx, digest); +} + +void sha256_init(sha256_ctx *ctx) +{ +#ifndef UNROLL_LOOPS + int i; + for (i = 0; i < 8; i++) { + ctx->h[i] = sha256_h0[i]; + } +#else + ctx->h[0] = sha256_h0[0]; ctx->h[1] = sha256_h0[1]; + ctx->h[2] = sha256_h0[2]; ctx->h[3] = sha256_h0[3]; + ctx->h[4] = sha256_h0[4]; ctx->h[5] = sha256_h0[5]; + ctx->h[6] = sha256_h0[6]; ctx->h[7] = sha256_h0[7]; +#endif /* !UNROLL_LOOPS */ + + ctx->len = 0; + ctx->tot_len = 0; +} + +void sha256_update(sha256_ctx *ctx, const unsigned char *message, + unsigned int len) +{ + unsigned int block_nb; + unsigned int new_len, rem_len, tmp_len; + const unsigned char *shifted_message; + + tmp_len = SHA256_BLOCK_SIZE - ctx->len; + rem_len = len < tmp_len ? len : tmp_len; + + memcpy(&ctx->block[ctx->len], message, rem_len); + + if (ctx->len + len < SHA256_BLOCK_SIZE) { + ctx->len += len; + return; + } + + new_len = len - rem_len; + block_nb = new_len / SHA256_BLOCK_SIZE; + + shifted_message = message + rem_len; + + sha256_transf(ctx, ctx->block, 1); + sha256_transf(ctx, shifted_message, block_nb); + + rem_len = new_len % SHA256_BLOCK_SIZE; + + memcpy(ctx->block, &shifted_message[block_nb << 6], + rem_len); + + ctx->len = rem_len; + ctx->tot_len += (block_nb + 1) << 6; +} + +void sha256_final(sha256_ctx *ctx, unsigned char *digest) +{ + unsigned int block_nb; + unsigned int pm_len; + unsigned int len_b; + +#ifndef UNROLL_LOOPS + int i; +#endif + + block_nb = (1 + ((SHA256_BLOCK_SIZE - 9) + < (ctx->len % SHA256_BLOCK_SIZE))); + + len_b = (ctx->tot_len + ctx->len) << 3; + pm_len = block_nb << 6; + + memset(ctx->block + ctx->len, 0, pm_len - ctx->len); + ctx->block[ctx->len] = 0x80; + UNPACK32(len_b, ctx->block + pm_len - 4); + + sha256_transf(ctx, ctx->block, block_nb); + +#ifndef UNROLL_LOOPS + for (i = 0 ; i < 8; i++) { + UNPACK32(ctx->h[i], &digest[i << 2]); + } +#else + UNPACK32(ctx->h[0], &digest[ 0]); + UNPACK32(ctx->h[1], &digest[ 4]); + UNPACK32(ctx->h[2], &digest[ 8]); + UNPACK32(ctx->h[3], &digest[12]); + UNPACK32(ctx->h[4], &digest[16]); + UNPACK32(ctx->h[5], &digest[20]); + UNPACK32(ctx->h[6], &digest[24]); + UNPACK32(ctx->h[7], &digest[28]); +#endif /* !UNROLL_LOOPS */ +} + +/* SHA-512 functions */ + +void sha512_transf(sha512_ctx *ctx, const unsigned char *message, + unsigned int block_nb) +{ + uint64 w[80]; + uint64 wv[8]; + uint64 t1, t2; + const unsigned char *sub_block; + int i, j; + + for (i = 0; i < (int) block_nb; i++) { + sub_block = message + (i << 7); + +#ifndef UNROLL_LOOPS + for (j = 0; j < 16; j++) { + PACK64(&sub_block[j << 3], &w[j]); + } + + for (j = 16; j < 80; j++) { + SHA512_SCR(j); + } + + for (j = 0; j < 8; j++) { + wv[j] = ctx->h[j]; + } + + for (j = 0; j < 80; j++) { + t1 = wv[7] + SHA512_F2(wv[4]) + CH(wv[4], wv[5], wv[6]) + + sha512_k[j] + w[j]; + t2 = SHA512_F1(wv[0]) + MAJ(wv[0], wv[1], wv[2]); + wv[7] = wv[6]; + wv[6] = wv[5]; + wv[5] = wv[4]; + wv[4] = wv[3] + t1; + wv[3] = wv[2]; + wv[2] = wv[1]; + wv[1] = wv[0]; + wv[0] = t1 + t2; + } + + for (j = 0; j < 8; j++) { + ctx->h[j] += wv[j]; + } +#else + PACK64(&sub_block[ 0], &w[ 0]); PACK64(&sub_block[ 8], &w[ 1]); + PACK64(&sub_block[ 16], &w[ 2]); PACK64(&sub_block[ 24], &w[ 3]); + PACK64(&sub_block[ 32], &w[ 4]); PACK64(&sub_block[ 40], &w[ 5]); + PACK64(&sub_block[ 48], &w[ 6]); PACK64(&sub_block[ 56], &w[ 7]); + PACK64(&sub_block[ 64], &w[ 8]); PACK64(&sub_block[ 72], &w[ 9]); + PACK64(&sub_block[ 80], &w[10]); PACK64(&sub_block[ 88], &w[11]); + PACK64(&sub_block[ 96], &w[12]); PACK64(&sub_block[104], &w[13]); + PACK64(&sub_block[112], &w[14]); PACK64(&sub_block[120], &w[15]); + + SHA512_SCR(16); SHA512_SCR(17); SHA512_SCR(18); SHA512_SCR(19); + SHA512_SCR(20); SHA512_SCR(21); SHA512_SCR(22); SHA512_SCR(23); + SHA512_SCR(24); SHA512_SCR(25); SHA512_SCR(26); SHA512_SCR(27); + SHA512_SCR(28); SHA512_SCR(29); SHA512_SCR(30); SHA512_SCR(31); + SHA512_SCR(32); SHA512_SCR(33); SHA512_SCR(34); SHA512_SCR(35); + SHA512_SCR(36); SHA512_SCR(37); SHA512_SCR(38); SHA512_SCR(39); + SHA512_SCR(40); SHA512_SCR(41); SHA512_SCR(42); SHA512_SCR(43); + SHA512_SCR(44); SHA512_SCR(45); SHA512_SCR(46); SHA512_SCR(47); + SHA512_SCR(48); SHA512_SCR(49); SHA512_SCR(50); SHA512_SCR(51); + SHA512_SCR(52); SHA512_SCR(53); SHA512_SCR(54); SHA512_SCR(55); + SHA512_SCR(56); SHA512_SCR(57); SHA512_SCR(58); SHA512_SCR(59); + SHA512_SCR(60); SHA512_SCR(61); SHA512_SCR(62); SHA512_SCR(63); + SHA512_SCR(64); SHA512_SCR(65); SHA512_SCR(66); SHA512_SCR(67); + SHA512_SCR(68); SHA512_SCR(69); SHA512_SCR(70); SHA512_SCR(71); + SHA512_SCR(72); SHA512_SCR(73); SHA512_SCR(74); SHA512_SCR(75); + SHA512_SCR(76); SHA512_SCR(77); SHA512_SCR(78); SHA512_SCR(79); + + wv[0] = ctx->h[0]; wv[1] = ctx->h[1]; + wv[2] = ctx->h[2]; wv[3] = ctx->h[3]; + wv[4] = ctx->h[4]; wv[5] = ctx->h[5]; + wv[6] = ctx->h[6]; wv[7] = ctx->h[7]; + + j = 0; + + do { + SHA512_EXP(0,1,2,3,4,5,6,7,j); j++; + SHA512_EXP(7,0,1,2,3,4,5,6,j); j++; + SHA512_EXP(6,7,0,1,2,3,4,5,j); j++; + SHA512_EXP(5,6,7,0,1,2,3,4,j); j++; + SHA512_EXP(4,5,6,7,0,1,2,3,j); j++; + SHA512_EXP(3,4,5,6,7,0,1,2,j); j++; + SHA512_EXP(2,3,4,5,6,7,0,1,j); j++; + SHA512_EXP(1,2,3,4,5,6,7,0,j); j++; + } while (j < 80); + + ctx->h[0] += wv[0]; ctx->h[1] += wv[1]; + ctx->h[2] += wv[2]; ctx->h[3] += wv[3]; + ctx->h[4] += wv[4]; ctx->h[5] += wv[5]; + ctx->h[6] += wv[6]; ctx->h[7] += wv[7]; +#endif /* !UNROLL_LOOPS */ + } +} + +void sha512(const unsigned char *message, unsigned int len, + unsigned char *digest) +{ + sha512_ctx ctx; + + sha512_init(&ctx); + sha512_update(&ctx, message, len); + sha512_final(&ctx, digest); +} + +void sha512_init(sha512_ctx *ctx) +{ +#ifndef UNROLL_LOOPS + int i; + for (i = 0; i < 8; i++) { + ctx->h[i] = sha512_h0[i]; + } +#else + ctx->h[0] = sha512_h0[0]; ctx->h[1] = sha512_h0[1]; + ctx->h[2] = sha512_h0[2]; ctx->h[3] = sha512_h0[3]; + ctx->h[4] = sha512_h0[4]; ctx->h[5] = sha512_h0[5]; + ctx->h[6] = sha512_h0[6]; ctx->h[7] = sha512_h0[7]; +#endif /* !UNROLL_LOOPS */ + + ctx->len = 0; + ctx->tot_len = 0; +} + +void sha512_update(sha512_ctx *ctx, const unsigned char *message, + unsigned int len) +{ + unsigned int block_nb; + unsigned int new_len, rem_len, tmp_len; + const unsigned char *shifted_message; + + tmp_len = SHA512_BLOCK_SIZE - ctx->len; + rem_len = len < tmp_len ? len : tmp_len; + + memcpy(&ctx->block[ctx->len], message, rem_len); + + if (ctx->len + len < SHA512_BLOCK_SIZE) { + ctx->len += len; + return; + } + + new_len = len - rem_len; + block_nb = new_len / SHA512_BLOCK_SIZE; + + shifted_message = message + rem_len; + + sha512_transf(ctx, ctx->block, 1); + sha512_transf(ctx, shifted_message, block_nb); + + rem_len = new_len % SHA512_BLOCK_SIZE; + + memcpy(ctx->block, &shifted_message[block_nb << 7], + rem_len); + + ctx->len = rem_len; + ctx->tot_len += (block_nb + 1) << 7; +} + +void sha512_final(sha512_ctx *ctx, unsigned char *digest) +{ + unsigned int block_nb; + unsigned int pm_len; + unsigned int len_b; + +#ifndef UNROLL_LOOPS + int i; +#endif + + block_nb = 1 + ((SHA512_BLOCK_SIZE - 17) + < (ctx->len % SHA512_BLOCK_SIZE)); + + len_b = (ctx->tot_len + ctx->len) << 3; + pm_len = block_nb << 7; + + memset(ctx->block + ctx->len, 0, pm_len - ctx->len); + ctx->block[ctx->len] = 0x80; + UNPACK32(len_b, ctx->block + pm_len - 4); + + sha512_transf(ctx, ctx->block, block_nb); + +#ifndef UNROLL_LOOPS + for (i = 0 ; i < 8; i++) { + UNPACK64(ctx->h[i], &digest[i << 3]); + } +#else + UNPACK64(ctx->h[0], &digest[ 0]); + UNPACK64(ctx->h[1], &digest[ 8]); + UNPACK64(ctx->h[2], &digest[16]); + UNPACK64(ctx->h[3], &digest[24]); + UNPACK64(ctx->h[4], &digest[32]); + UNPACK64(ctx->h[5], &digest[40]); + UNPACK64(ctx->h[6], &digest[48]); + UNPACK64(ctx->h[7], &digest[56]); +#endif /* !UNROLL_LOOPS */ +} + +/* SHA-384 functions */ + +void sha384(const unsigned char *message, unsigned int len, + unsigned char *digest) +{ + sha384_ctx ctx; + + sha384_init(&ctx); + sha384_update(&ctx, message, len); + sha384_final(&ctx, digest); +} + +void sha384_init(sha384_ctx *ctx) +{ +#ifndef UNROLL_LOOPS + int i; + for (i = 0; i < 8; i++) { + ctx->h[i] = sha384_h0[i]; + } +#else + ctx->h[0] = sha384_h0[0]; ctx->h[1] = sha384_h0[1]; + ctx->h[2] = sha384_h0[2]; ctx->h[3] = sha384_h0[3]; + ctx->h[4] = sha384_h0[4]; ctx->h[5] = sha384_h0[5]; + ctx->h[6] = sha384_h0[6]; ctx->h[7] = sha384_h0[7]; +#endif /* !UNROLL_LOOPS */ + + ctx->len = 0; + ctx->tot_len = 0; +} + +void sha384_update(sha384_ctx *ctx, const unsigned char *message, + unsigned int len) +{ + unsigned int block_nb; + unsigned int new_len, rem_len, tmp_len; + const unsigned char *shifted_message; + + tmp_len = SHA384_BLOCK_SIZE - ctx->len; + rem_len = len < tmp_len ? len : tmp_len; + + memcpy(&ctx->block[ctx->len], message, rem_len); + + if (ctx->len + len < SHA384_BLOCK_SIZE) { + ctx->len += len; + return; + } + + new_len = len - rem_len; + block_nb = new_len / SHA384_BLOCK_SIZE; + + shifted_message = message + rem_len; + + sha512_transf(ctx, ctx->block, 1); + sha512_transf(ctx, shifted_message, block_nb); + + rem_len = new_len % SHA384_BLOCK_SIZE; + + memcpy(ctx->block, &shifted_message[block_nb << 7], + rem_len); + + ctx->len = rem_len; + ctx->tot_len += (block_nb + 1) << 7; +} + +void sha384_final(sha384_ctx *ctx, unsigned char *digest) +{ + unsigned int block_nb; + unsigned int pm_len; + unsigned int len_b; + +#ifndef UNROLL_LOOPS + int i; +#endif + + block_nb = (1 + ((SHA384_BLOCK_SIZE - 17) + < (ctx->len % SHA384_BLOCK_SIZE))); + + len_b = (ctx->tot_len + ctx->len) << 3; + pm_len = block_nb << 7; + + memset(ctx->block + ctx->len, 0, pm_len - ctx->len); + ctx->block[ctx->len] = 0x80; + UNPACK32(len_b, ctx->block + pm_len - 4); + + sha512_transf(ctx, ctx->block, block_nb); + +#ifndef UNROLL_LOOPS + for (i = 0 ; i < 6; i++) { + UNPACK64(ctx->h[i], &digest[i << 3]); + } +#else + UNPACK64(ctx->h[0], &digest[ 0]); + UNPACK64(ctx->h[1], &digest[ 8]); + UNPACK64(ctx->h[2], &digest[16]); + UNPACK64(ctx->h[3], &digest[24]); + UNPACK64(ctx->h[4], &digest[32]); + UNPACK64(ctx->h[5], &digest[40]); +#endif /* !UNROLL_LOOPS */ +} + +/* SHA-224 functions */ + +void sha224(const unsigned char *message, unsigned int len, + unsigned char *digest) +{ + sha224_ctx ctx; + + sha224_init(&ctx); + sha224_update(&ctx, message, len); + sha224_final(&ctx, digest); +} + +void sha224_init(sha224_ctx *ctx) +{ +#ifndef UNROLL_LOOPS + int i; + for (i = 0; i < 8; i++) { + ctx->h[i] = sha224_h0[i]; + } +#else + ctx->h[0] = sha224_h0[0]; ctx->h[1] = sha224_h0[1]; + ctx->h[2] = sha224_h0[2]; ctx->h[3] = sha224_h0[3]; + ctx->h[4] = sha224_h0[4]; ctx->h[5] = sha224_h0[5]; + ctx->h[6] = sha224_h0[6]; ctx->h[7] = sha224_h0[7]; +#endif /* !UNROLL_LOOPS */ + + ctx->len = 0; + ctx->tot_len = 0; +} + +void sha224_update(sha224_ctx *ctx, const unsigned char *message, + unsigned int len) +{ + unsigned int block_nb; + unsigned int new_len, rem_len, tmp_len; + const unsigned char *shifted_message; + + tmp_len = SHA224_BLOCK_SIZE - ctx->len; + rem_len = len < tmp_len ? len : tmp_len; + + memcpy(&ctx->block[ctx->len], message, rem_len); + + if (ctx->len + len < SHA224_BLOCK_SIZE) { + ctx->len += len; + return; + } + + new_len = len - rem_len; + block_nb = new_len / SHA224_BLOCK_SIZE; + + shifted_message = message + rem_len; + + sha256_transf(ctx, ctx->block, 1); + sha256_transf(ctx, shifted_message, block_nb); + + rem_len = new_len % SHA224_BLOCK_SIZE; + + memcpy(ctx->block, &shifted_message[block_nb << 6], + rem_len); + + ctx->len = rem_len; + ctx->tot_len += (block_nb + 1) << 6; +} + +void sha224_final(sha224_ctx *ctx, unsigned char *digest) +{ + unsigned int block_nb; + unsigned int pm_len; + unsigned int len_b; + +#ifndef UNROLL_LOOPS + int i; +#endif + + block_nb = (1 + ((SHA224_BLOCK_SIZE - 9) + < (ctx->len % SHA224_BLOCK_SIZE))); + + len_b = (ctx->tot_len + ctx->len) << 3; + pm_len = block_nb << 6; + + memset(ctx->block + ctx->len, 0, pm_len - ctx->len); + ctx->block[ctx->len] = 0x80; + UNPACK32(len_b, ctx->block + pm_len - 4); + + sha256_transf(ctx, ctx->block, block_nb); + +#ifndef UNROLL_LOOPS + for (i = 0 ; i < 7; i++) { + UNPACK32(ctx->h[i], &digest[i << 2]); + } +#else + UNPACK32(ctx->h[0], &digest[ 0]); + UNPACK32(ctx->h[1], &digest[ 4]); + UNPACK32(ctx->h[2], &digest[ 8]); + UNPACK32(ctx->h[3], &digest[12]); + UNPACK32(ctx->h[4], &digest[16]); + UNPACK32(ctx->h[5], &digest[20]); + UNPACK32(ctx->h[6], &digest[24]); +#endif /* !UNROLL_LOOPS */ +} + +#ifdef TEST_VECTORS + +/* FIPS 180-2 Validation tests */ + +#include +#include + +void test(const char *vector, unsigned char *digest, + unsigned int digest_size) +{ + char output[2 * SHA512_DIGEST_SIZE + 1]; + int i; + + output[2 * digest_size] = '\0'; + + for (i = 0; i < (int) digest_size ; i++) { + sprintf(output + 2 * i, "%02x", digest[i]); + } + + printf("H: %s\n", output); + if (strcmp(vector, output)) { + fprintf(stderr, "Test failed.\n"); + exit(EXIT_FAILURE); + } +} + +int main(void) +{ + static const char *vectors[4][3] = + { /* SHA-224 */ + { + "23097d223405d8228642a477bda255b32aadbce4bda0b3f7e36c9da7", + "75388b16512776cc5dba5da1fd890150b0c6455cb4f58b1952522525", + "20794655980c91d8bbb4c1ea97618a4bf03f42581948b2ee4ee7ad67", + }, + /* SHA-256 */ + { + "ba7816bf8f01cfea414140de5dae2223b00361a396177a9cb410ff61f20015ad", + "248d6a61d20638b8e5c026930c3e6039a33ce45964ff2167f6ecedd419db06c1", + "cdc76e5c9914fb9281a1c7e284d73e67f1809a48a497200e046d39ccc7112cd0", + }, + /* SHA-384 */ + { + "cb00753f45a35e8bb5a03d699ac65007272c32ab0eded1631a8b605a43ff5bed" + "8086072ba1e7cc2358baeca134c825a7", + "09330c33f71147e83d192fc782cd1b4753111b173b3b05d22fa08086e3b0f712" + "fcc7c71a557e2db966c3e9fa91746039", + "9d0e1809716474cb086e834e310a4a1ced149e9c00f248527972cec5704c2a5b" + "07b8b3dc38ecc4ebae97ddd87f3d8985", + }, + /* SHA-512 */ + { + "ddaf35a193617abacc417349ae20413112e6fa4e89a97ea20a9eeee64b55d39a" + "2192992a274fc1a836ba3c23a3feebbd454d4423643ce80e2a9ac94fa54ca49f", + "8e959b75dae313da8cf4f72814fc143f8f7779c6eb9f7fa17299aeadb6889018" + "501d289e4900f7e4331b99dec4b5433ac7d329eeb6dd26545e96e55b874be909", + "e718483d0ce769644e2e42c7bc15b4638e1f98b13b2044285632a803afa973eb" + "de0ff244877ea60a4cb0432ce577c31beb009c5c2c49aa2e4eadb217ad8cc09b" + } + }; + + static const char message1[] = "abc"; + static const char message2a[] = "abcdbcdecdefdefgefghfghighijhi" + "jkijkljklmklmnlmnomnopnopq"; + static const char message2b[] = "abcdefghbcdefghicdefghijdefghijkefghij" + "klfghijklmghijklmnhijklmnoijklmnopjklm" + "nopqklmnopqrlmnopqrsmnopqrstnopqrstu"; + unsigned char *message3; + unsigned int message3_len = 1000000; + unsigned char digest[SHA512_DIGEST_SIZE]; + + message3 = malloc(message3_len); + if (message3 == NULL) { + fprintf(stderr, "Can't allocate memory\n"); + return -1; + } + memset(message3, 'a', message3_len); + + printf("SHA-2 FIPS 180-2 Validation tests\n\n"); + printf("SHA-224 Test vectors\n"); + + sha224((const unsigned char *) message1, strlen(message1), digest); + test(vectors[0][0], digest, SHA224_DIGEST_SIZE); + sha224((const unsigned char *) message2a, strlen(message2a), digest); + test(vectors[0][1], digest, SHA224_DIGEST_SIZE); + sha224(message3, message3_len, digest); + test(vectors[0][2], digest, SHA224_DIGEST_SIZE); + printf("\n"); + + printf("SHA-256 Test vectors\n"); + + sha256((const unsigned char *) message1, strlen(message1), digest); + test(vectors[1][0], digest, SHA256_DIGEST_SIZE); + sha256((const unsigned char *) message2a, strlen(message2a), digest); + test(vectors[1][1], digest, SHA256_DIGEST_SIZE); + sha256(message3, message3_len, digest); + test(vectors[1][2], digest, SHA256_DIGEST_SIZE); + printf("\n"); + + printf("SHA-384 Test vectors\n"); + + sha384((const unsigned char *) message1, strlen(message1), digest); + test(vectors[2][0], digest, SHA384_DIGEST_SIZE); + sha384((const unsigned char *)message2b, strlen(message2b), digest); + test(vectors[2][1], digest, SHA384_DIGEST_SIZE); + sha384(message3, message3_len, digest); + test(vectors[2][2], digest, SHA384_DIGEST_SIZE); + printf("\n"); + + printf("SHA-512 Test vectors\n"); + + sha512((const unsigned char *) message1, strlen(message1), digest); + test(vectors[3][0], digest, SHA512_DIGEST_SIZE); + sha512((const unsigned char *) message2b, strlen(message2b), digest); + test(vectors[3][1], digest, SHA512_DIGEST_SIZE); + sha512(message3, message3_len, digest); + test(vectors[3][2], digest, SHA512_DIGEST_SIZE); + printf("\n"); + + printf("All tests passed.\n"); + + return 0; +} + +#endif /* TEST_VECTORS */ + diff --git a/src/lib/hash/sha2/sha2.h b/src/lib/hash/sha2/sha2.h new file mode 100644 index 0000000..60f52e3 --- /dev/null +++ b/src/lib/hash/sha2/sha2.h @@ -0,0 +1,108 @@ +/* + * FIPS 180-2 SHA-224/256/384/512 implementation + * Last update: 02/02/2007 + * Issue date: 04/30/2005 + * + * Copyright (C) 2005, 2007 Olivier Gay + * All rights reserved. + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions + * are met: + * 1. Redistributions of source code must retain the above copyright + * notice, this list of conditions and the following disclaimer. + * 2. Redistributions in binary form must reproduce the above copyright + * notice, this list of conditions and the following disclaimer in the + * documentation and/or other materials provided with the distribution. + * 3. Neither the name of the project nor the names of its contributors + * may be used to endorse or promote products derived from this software + * without specific prior written permission. + * + * THIS SOFTWARE IS PROVIDED BY THE PROJECT AND CONTRIBUTORS ``AS IS'' AND + * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE + * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE + * ARE DISCLAIMED. IN NO EVENT SHALL THE PROJECT OR CONTRIBUTORS BE LIABLE + * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL + * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS + * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) + * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT + * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY + * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF + * SUCH DAMAGE. + */ + +#ifndef SHA2_H +#define SHA2_H + +#define SHA224_DIGEST_SIZE ( 224 / 8) +#define SHA256_DIGEST_SIZE ( 256 / 8) +#define SHA384_DIGEST_SIZE ( 384 / 8) +#define SHA512_DIGEST_SIZE ( 512 / 8) + +#define SHA256_BLOCK_SIZE ( 512 / 8) +#define SHA512_BLOCK_SIZE (1024 / 8) +#define SHA384_BLOCK_SIZE SHA512_BLOCK_SIZE +#define SHA224_BLOCK_SIZE SHA256_BLOCK_SIZE + +#ifndef SHA2_TYPES +#define SHA2_TYPES +typedef unsigned char uint8; +typedef unsigned int uint32; +typedef unsigned long long uint64; +#endif + +#ifdef __cplusplus +extern "C" { +#endif + +typedef struct { + unsigned int tot_len; + unsigned int len; + unsigned char block[2 * SHA256_BLOCK_SIZE]; + uint32 h[8]; +} sha256_ctx; + +typedef struct { + unsigned int tot_len; + unsigned int len; + unsigned char block[2 * SHA512_BLOCK_SIZE]; + uint64 h[8]; +} sha512_ctx; + +typedef sha512_ctx sha384_ctx; +typedef sha256_ctx sha224_ctx; + +void sha224_init(sha224_ctx *ctx); +void sha224_update(sha224_ctx *ctx, const unsigned char *message, + unsigned int len); +void sha224_final(sha224_ctx *ctx, unsigned char *digest); +void sha224(const unsigned char *message, unsigned int len, + unsigned char *digest); + +void sha256_init(sha256_ctx * ctx); +void sha256_update(sha256_ctx *ctx, const unsigned char *message, + unsigned int len); +void sha256_final(sha256_ctx *ctx, unsigned char *digest); +void sha256(const unsigned char *message, unsigned int len, + unsigned char *digest); + +void sha384_init(sha384_ctx *ctx); +void sha384_update(sha384_ctx *ctx, const unsigned char *message, + unsigned int len); +void sha384_final(sha384_ctx *ctx, unsigned char *digest); +void sha384(const unsigned char *message, unsigned int len, + unsigned char *digest); + +void sha512_init(sha512_ctx *ctx); +void sha512_update(sha512_ctx *ctx, const unsigned char *message, + unsigned int len); +void sha512_final(sha512_ctx *ctx, unsigned char *digest); +void sha512(const unsigned char *message, unsigned int len, + unsigned char *digest); + +#ifdef __cplusplus +} +#endif + +#endif /* !SHA2_H */ + diff --git a/src/lib/header.c b/src/lib/header.c new file mode 100644 index 0000000..38b587b --- /dev/null +++ b/src/lib/header.c @@ -0,0 +1,568 @@ +/* + * Copyright 2018 Jonathan Dieter + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions are met: + * + * 1. Redistributions of source code must retain the above copyright notice, + * this list of conditions and the following disclaimer. + * + * 2. Redistributions in binary form must reproduce the above copyright notice, + * this list of conditions and the following disclaimer in the documentation + * and/or other materials provided with the distribution. + * + * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" + * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE + * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE + * ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE + * LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR + * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF + * SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS + * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN + * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) + * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE + * POSSIBILITY OF SUCH DAMAGE. + */ + +#include +#include +#include +#include +#include +#include + +#include "zck_private.h" + +static bool check_flags(zckCtx *zck, size_t flags) { + zck->has_streams = flags & 1; + if(zck->has_streams) { + flags -= 1; + set_fatal_error(zck, + "This version of zchunk doesn't support streams"); + return false; + } + zck->has_optional_elems = flags & 2; + if(zck->has_optional_elems) + flags -= 2; + flags = flags & (SIZE_MAX - 1); + if(flags != 0) { + set_fatal_error(zck, "Unknown flags(s) set"); + return false; + } + return true; +} + +static bool read_optional_element(zckCtx *zck, size_t id, size_t data_size, + char *data) { + zck_log(ZCK_LOG_WARNING, "Unknown optional element id %i set", id); + return true; +} + +static bool read_header_from_file(zckCtx *zck) { + /* Allocate header and store any extra bytes at beginning of header */ + zck->header = zrealloc(zck->header, zck->lead_size + zck->header_length); + zck->lead_string = zck->header; + char *header = zck->header + zck->lead_size; + size_t loaded = 0; + + if(zck->header_length < zck->header_size - zck->lead_size) { + set_fatal_error(zck, "Header size is too small for actual data"); + return false; + } + if(zck->lead_size < zck->header_size) + loaded = zck->header_size - zck->lead_size; + + /* Read header from file */ + zck_log(ZCK_LOG_DEBUG, "Reading the rest of the header: %lu bytes", + zck->header_length); + if(loaded < zck->header_length) { + if(!read_data(zck, header + loaded, zck->header_length - loaded)) + return false; + zck->header_size = zck->lead_size + zck->header_length; + } + + if(!hash_init(zck, &(zck->check_full_hash), &(zck->hash_type))) + return false; + if(!hash_update(zck, &(zck->check_full_hash), zck->header, + zck->hdr_digest_loc)) + return false; + if(!hash_update(zck, &(zck->check_full_hash), header, zck->header_length)) + return false; + int ret = validate_header(zck); + if(ret < 1) { + if(ret == -1) + set_fatal_error(zck, "Header checksum failed verification"); + return false; + } + return true; +} + +static bool read_preface(zckCtx *zck) { + VALIDATE_READ_BOOL(zck); + + if(zck->header_digest == NULL) { + set_error(zck, "Reading preface before lead is read"); + return false; + } + + char *header = zck->header + zck->lead_size; + size_t length = 0; + size_t max_length = zck->header_length; + + /* Read data digest */ + zck_log(ZCK_LOG_DEBUG, "Reading data digest"); + if(length + zck->hash_type.digest_size > max_length) { + set_fatal_error(zck, "Read past end of header"); + return false; + } + zck->full_hash_digest = zmalloc(zck->hash_type.digest_size); + memcpy(zck->full_hash_digest, header+length, zck->hash_type.digest_size); + length += zck->hash_type.digest_size; + + /* Read flags */ + size_t flags = 0; + if(!compint_to_size(zck, &flags, header+length, &length, max_length)) + return false; + if(!check_flags(zck, flags)) + return false; + + /* Setup for reading compression type */ + zck_log(ZCK_LOG_DEBUG, "Reading compression type and index size"); + int tmp = 0; + + /* Read and initialize compression type */ + if(!compint_to_int(zck, &tmp, header+length, &length, max_length)) + return false; + if(!comp_ioption(zck, ZCK_COMP_TYPE, tmp)) + return false; + if(!comp_init(zck)) + return false; + + /* Read optional flags */ + if(zck->has_optional_elems) { + size_t opt_count = 0; + if(!compint_to_size(zck, &opt_count, header+length, &length, + max_length)) + return false; + for(size_t i=0; iindex_size = tmp; + + zck->preface_string = header; + zck->preface_size = length; + return true; +} + +static bool read_index(zckCtx *zck) { + VALIDATE_READ_BOOL(zck); + + if(zck->preface_string == NULL) { + set_error(zck, "Reading index before preface is read"); + return false; + } + + char *header = NULL; + zck_log(ZCK_LOG_DEBUG, "Reading index"); + if(zck->lead_size + zck->preface_size + zck->index_size > + zck->header_size) { + set_fatal_error(zck, "Read past end of header"); + return false; + } + header = zck->header + zck->lead_size + zck->preface_size; + int max_length = zck->header_size - (zck->lead_size + zck->preface_size); + if(!index_read(zck, header, zck->index_size, max_length)) + return false; + + zck->index_string = header; + return true; +} + +static bool read_sig(zckCtx *zck) { + VALIDATE_READ_BOOL(zck); + + if(zck->index_string == NULL) { + set_error(zck, "Reading signatures before index is read"); + return false; + } + + char *header = zck->header + zck->lead_size + zck->preface_size + + zck->index_size; + size_t max_length = zck->header_size - (zck->lead_size + zck->preface_size + + zck->index_size); + size_t length = 0; + + if(!compint_to_int(zck, &(zck->sigs.count), header, &length, max_length)) + return false; + + /* We don't actually support signatures yet, so bail if there is one */ + zck_log(ZCK_LOG_DEBUG, "Signature count: %i", zck->sigs.count); + if(zck->sigs.count > 0) { + set_fatal_error(zck, "Signatures aren't supported yet"); + return false; + } + + /* Set data_offset */ + zck->data_offset = zck->lead_size + zck->header_length; + + if(zck->header_size > + zck->lead_size + zck->preface_size + zck->index_size + length) + zck_log(ZCK_LOG_WARNING, "There are %lu unused bytes in the header"); + + zck->sig_size = length; + zck->sig_string = header; + return true; +} + +static bool preface_create(zckCtx *zck) { + VALIDATE_WRITE_BOOL(zck); + + int header_malloc = zck->hash_type.digest_size + 4 + 2*MAX_COMP_SIZE; + + char *header = zmalloc(header_malloc); + size_t length = 0; + + /* Write out the full data digest */ + memcpy(header + length, zck->full_hash_digest, zck->hash_type.digest_size); + length += zck->hash_type.digest_size; + + /* Write out flags */ + size_t flags = 0; + if(zck->has_streams) + flags &= 1; + compint_from_size(header+length, flags, &length); + + /* Write out compression type and index size */ + if(!compint_from_int(zck, header+length, zck->comp.type, &length)) { + free(header); + return false; + } + compint_from_size(header+length, zck->index_size, &length); + + /* Shrink header to actual size */ + header = zrealloc(header, length); + + zck->preface_string = header; + zck->preface_size = length; + zck_log(ZCK_LOG_DEBUG, "Generated preface: %lu bytes", zck->preface_size); + return true; +} + +static bool sig_create(zckCtx *zck) { + char *header = zmalloc(MAX_COMP_SIZE); + size_t length = 0; + + zck_log(ZCK_LOG_DEBUG, "Calculating %i signatures", zck->sigs.count); + + /* Write out signature count and signatures */ + if(!compint_from_int(zck, header+length, zck->sigs.count, &length)) { + free(header); + return false; + } + for(int i=0; isigs.count; i++) { + // TODO: Add signatures + } + zck->sig_string = header; + zck->sig_size = length; + zck_log(ZCK_LOG_DEBUG, "Generated signatures: %lu bytes", zck->sig_size); + return true; +} + +static bool lead_create(zckCtx *zck) { + int phs = 5 + 2*MAX_COMP_SIZE + zck->hash_type.digest_size; + char *header = zmalloc(phs); + size_t length = 0; + memcpy(header, "\0ZCK1", 5); + length += 5; + + /* Write out full data and header hash type */ + compint_from_size(header + length, zck->hash_type.type, &length); + /* Write out header length */ + zck->header_length = zck->preface_size + zck->index_size + zck->sig_size; + compint_from_size(header + length, zck->header_length, &length); + /* Skip header digest; we'll fill it in later */ + zck->hdr_digest_loc = length; + length += zck->hash_type.digest_size; + + header = zrealloc(header, length); + + zck->lead_string = header; + zck->lead_size = length; + zck_log(ZCK_LOG_DEBUG, "Generated lead: %lu bytes", zck->lead_size); + return true; +} + +bool header_create(zckCtx *zck) { + VALIDATE_WRITE_BOOL(zck); + + /* Rebuild header without header hash */ + if(zck->header_digest) { + free(zck->header_digest); + zck->header_digest = NULL; + } + + /* Generate index */ + if(!index_create(zck)) + return false; + + /* Generate preface */ + if(!preface_create(zck)) + return false; + + /* Rebuild signatures */ + if(!sig_create(zck)) + return false; + + /* Rebuild pre-header */ + if(!lead_create(zck)) + return false; + + /* Calculate data offset */ + zck->data_offset = zck->lead_size + zck->preface_size + + zck->index_size + zck->sig_size; + + /* Merge everything into one large string */ + zck_log(ZCK_LOG_DEBUG, "Merging into header: %lu bytes", + zck->data_offset); + zck->header = zmalloc(zck->data_offset); + size_t offs = 0; + memcpy(zck->header + offs, zck->lead_string, zck->lead_size); + free(zck->lead_string); + zck->lead_string = zck->header + offs; + offs += zck->lead_size; + memcpy(zck->header + offs, zck->preface_string, zck->preface_size); + free(zck->preface_string); + zck->preface_string = zck->header + offs; + offs += zck->preface_size; + memcpy(zck->header + offs, zck->index_string, zck->index_size); + free(zck->index_string); + zck->index_string = zck->header + offs; + offs += zck->index_size; + memcpy(zck->header + offs, zck->sig_string, zck->sig_size); + free(zck->sig_string); + zck->sig_string = zck->header + offs; + zck->header_size = zck->data_offset; + + zckHash header_hash = {0}; + + /* Calculate hash of header */ + if(!hash_init(zck, &header_hash, &(zck->hash_type))) + return false; + zck_log(ZCK_LOG_DEBUG, "Hashing lead"); + /* Hash lead up to header digest */ + if(!hash_update(zck, &header_hash, zck->lead_string, + zck->hdr_digest_loc)) + return false; + zck_log(ZCK_LOG_DEBUG, "Hashing the rest"); + /* Hash rest of header */ + if(!hash_update(zck, &header_hash, zck->preface_string, zck->header_length)) + return false; + zck->header_digest = hash_finalize(zck, &header_hash); + if(zck->header_digest == NULL) + return false; + + /* Write digest to header */ + memcpy(zck->lead_string+zck->hdr_digest_loc, zck->header_digest, + zck->hash_type.digest_size); + + return true; +} + +bool write_header(zckCtx *zck) { + VALIDATE_WRITE_BOOL(zck); + + zck_log(ZCK_LOG_DEBUG, "Writing header: %lu bytes", + zck->lead_size); + if(!write_data(zck, zck->fd, zck->header, zck->header_size)) + return false; + return true; +} + +static bool read_lead(zckCtx *zck) { + VALIDATE_READ_BOOL(zck); + + int lead = 5 + 2*MAX_COMP_SIZE; + + char *header = zmalloc(lead); + size_t length = 0; + + if(read_data(zck, header, lead) < lead) { + free(header); + set_error(zck, "Short read"); + return false; + } + + if(memcmp(header, "\0ZCK1", 5) != 0) { + free(header); + set_error(zck, "Invalid lead, perhaps this is not a zck file?"); + return false; + } + length += 5; + + /* Read hash type for header and full digest and initialize check hash */ + int hash_type = 0; + if(!compint_to_int(zck, &hash_type, header+length, &length, lead)) { + free(header); + return false; + } + if(zck->prep_hash_type > -1 && zck->prep_hash_type != hash_type) { + free(header); + set_error(zck, "Hash type (%i) doesn't match requested hash type " + "(%i)", hash_type, zck->prep_hash_type); + return false; + } + if(!hash_setup(zck, &(zck->hash_type), hash_type)) { + free(header); + return false; + } + zck_log(ZCK_LOG_DEBUG, "Setting header and full digest hash type to %s", + zck_hash_name_from_type(hash_type)); + + /* Read header size */ + size_t header_length = 0; + if(!compint_to_size(zck, &header_length, header+length, &length, lead)) { + free(header); + hash_reset(&(zck->hash_type)); + return false; + } + zck->header_length = header_length; + + /* Set header digest location */ + zck->hdr_digest_loc = length; + + /* Read header digest */ + zck_log(ZCK_LOG_DEBUG, "Reading header digest"); + header = zrealloc(header, length + zck->hash_type.digest_size); + size_t to_read = 0; + if(lead < length + zck->hash_type.digest_size) + to_read = length + zck->hash_type.digest_size - lead; + if(read_data(zck, header + lead, to_read) < to_read) { + free(header); + zck->header_length = 0; + zck->hdr_digest_loc = 0; + hash_reset(&(zck->hash_type)); + return false; + } + lead += to_read; + + if(zck->prep_digest && + memcmp(zck->prep_digest, header + length, zck->hash_type.digest_size) != 0) { + zck->header_length = 0; + zck->hdr_digest_loc = 0; + hash_reset(&(zck->hash_type)); + set_error(zck, + "Header digest doesn't match requested header digest" + "Expected: %sActual: %s", + get_digest_string(zck->prep_digest, + zck->hash_type.digest_size), + get_digest_string(header + length, + zck->hash_type.digest_size)); + free(header); + return false; + } + zck->header_digest = zmalloc(zck->hash_type.digest_size); + memcpy(zck->header_digest, header + length, zck->hash_type.digest_size); + length += zck->hash_type.digest_size; + + /* Check whether full header length matches specified header length */ + if(zck->prep_hdr_size > -1 && + (size_t)zck->prep_hdr_size != zck->header_length + length) { + free(header); + zck->header_length = 0; + zck->hdr_digest_loc = 0; + hash_reset(&(zck->hash_type)); + free(zck->header_digest); + zck->header_digest = NULL; + set_error(zck, + "Header length (%lu) doesn't match requested header length " + "(%lu)", zck->header_length + length, + zck->prep_hdr_size); + return false; + } + /* Store pre-header */ + zck->header = header; + zck->header_size = lead; + zck->lead_string = header; + zck->lead_size = length; + zck_log(ZCK_LOG_DEBUG, "Parsed lead: %lu bytes", length); + return true; +} + +bool PUBLIC zck_read_lead(zckCtx *zck) { + VALIDATE_BOOL(zck); + + return read_lead(zck); +} + +bool PUBLIC zck_validate_lead(zckCtx *zck) { + VALIDATE_BOOL(zck); + + int retval = read_lead(zck); + if(!zck_clear_error(zck)) + return false; + free(zck->header); + free(zck->header_digest); + zck->header = NULL; + zck->header_size = 0; + zck->header_length = 0; + zck->hdr_digest_loc = 0; + zck->lead_string = NULL; + zck->lead_size = 0; + zck->header_digest = NULL; + zck->hdr_digest_loc = 0; + hash_reset(&(zck->hash_type)); + if(!seek_data(zck, 0, SEEK_SET)) + return false; + return retval; +} + +bool PUBLIC zck_read_header(zckCtx *zck) { + VALIDATE_READ_BOOL(zck); + + if(!read_header_from_file(zck)) + return false; + if(!read_preface(zck)) + return false; + if(!read_index(zck)) + return false; + if(!read_sig(zck)) + return false; + return true; +} + +ssize_t PUBLIC zck_get_header_length(zckCtx *zck) { + VALIDATE_INT(zck); + return zck->lead_size + zck->header_length; +} + +ssize_t PUBLIC zck_get_lead_length(zckCtx *zck) { + VALIDATE_INT(zck); + return zck->lead_size; +} + +ssize_t PUBLIC zck_get_data_length(zckCtx *zck) { + VALIDATE_INT(zck); + zckChunk *idx = zck->index.first; + while(idx->next != NULL) + idx = idx->next; + return idx->start + idx->comp_length; +} + +ssize_t PUBLIC zck_get_length(zckCtx *zck) { + VALIDATE_INT(zck); + return zck_get_header_length(zck) + zck_get_data_length(zck); +} diff --git a/src/lib/index/index_common.c b/src/lib/index/index_common.c new file mode 100644 index 0000000..3456d26 --- /dev/null +++ b/src/lib/index/index_common.c @@ -0,0 +1,94 @@ +/* + * Copyright 2018 Jonathan Dieter + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions are met: + * + * 1. Redistributions of source code must retain the above copyright notice, + * this list of conditions and the following disclaimer. + * + * 2. Redistributions in binary form must reproduce the above copyright notice, + * this list of conditions and the following disclaimer in the documentation + * and/or other materials provided with the distribution. + * + * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" + * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE + * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE + * ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE + * LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR + * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF + * SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS + * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN + * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) + * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE + * POSSIBILITY OF SUCH DAMAGE. + */ + +#include +#include +#include +#include +#include + +#include "zck_private.h" + +static void index_free_item(zckChunk **item) { + if(*item == NULL) + return; + + if((*item)->digest) + free((*item)->digest); + free(*item); + *item = NULL; + return; +} + +void index_clean(zckIndex *index) { + if(index == NULL) + return; + + HASH_CLEAR(hh, index->ht); + if(index->first) { + zckChunk *next; + zckChunk *tmp=index->first; + while(tmp != NULL) { + next = tmp->next; + index_free_item(&tmp); + tmp = next; + } + } + memset(index, 0, sizeof(zckIndex)); +} + +void index_free(zckCtx *zck) { + index_clean(&(zck->index)); + if(zck->full_hash_digest) { + free(zck->full_hash_digest); + zck->full_hash_digest = NULL; + } + if(zck->full_hash.ctx) { + free(zck->full_hash.ctx); + zck->full_hash.ctx = NULL; + } + zck->lead_string = NULL; + zck->lead_size = 0; + zck->preface_string = NULL; + zck->preface_size = 0; + zck->index_string = NULL; + zck->index_size = 0; + zck->sig_string = NULL; + zck->sig_size = 0; + if(zck->header_digest) { + free(zck->header_digest); + zck->header_digest = NULL; + } +} + +void clear_work_index(zckCtx *zck) { + if(zck == NULL) + return; + + hash_close(&(zck->work_index_hash)); + if(zck->work_index_item) + index_free_item(&(zck->work_index_item)); +} diff --git a/src/lib/index/index_create.c b/src/lib/index/index_create.c new file mode 100644 index 0000000..8cbc316 --- /dev/null +++ b/src/lib/index/index_create.c @@ -0,0 +1,192 @@ +/* + * Copyright 2018 Jonathan Dieter + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions are met: + * + * 1. Redistributions of source code must retain the above copyright notice, + * this list of conditions and the following disclaimer. + * + * 2. Redistributions in binary form must reproduce the above copyright notice, + * this list of conditions and the following disclaimer in the documentation + * and/or other materials provided with the distribution. + * + * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" + * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE + * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE + * ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE + * LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR + * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF + * SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS + * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN + * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) + * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE + * POSSIBILITY OF SUCH DAMAGE. + */ + +#include +#include +#include +#include +#include + +#include "zck_private.h" + +static bool create_chunk(zckCtx *zck) { + VALIDATE_BOOL(zck); + + clear_work_index(zck); + zck->work_index_item = zmalloc(sizeof(zckChunk)); + if(!hash_init(zck, &(zck->work_index_hash), &(zck->chunk_hash_type))) + return false; + return true; +} + +static bool finish_chunk(zckIndex *index, zckChunk *item, char *digest, + bool valid, zckCtx *zck) { + VALIDATE_BOOL(zck); + ALLOCD_BOOL(zck, index); + ALLOCD_BOOL(zck, item); + + item->digest = zmalloc(index->digest_size); + if(digest) { + memcpy(item->digest, digest, index->digest_size); + item->digest_size = index->digest_size; + } + item->start = index->length; + item->valid = valid; + item->zck = zck; + item->number = index->count; + if(index->first == NULL) { + index->first = item; + } else { + index->last->next = item; + } + index->last = item; + index->count += 1; + index->length += item->comp_length; + return true; +} + +bool index_create(zckCtx *zck) { + VALIDATE_BOOL(zck); + + char *index; + size_t index_malloc = 0; + size_t index_size = 0; + + + zck->full_hash_digest = hash_finalize(zck, &(zck->full_hash)); + if(zck->full_hash_digest == NULL) + return false; + + /* Set initial malloc size */ + index_malloc = MAX_COMP_SIZE * 2; + + /* Add digest size + MAX_COMP_SIZE bytes for length of each entry in + * index */ + if(zck->index.first) { + zckChunk *tmp = zck->index.first; + while(tmp) { + index_malloc += zck->index.digest_size + MAX_COMP_SIZE*2; + tmp = tmp->next; + } + } + + /* Write index */ + index = zmalloc(index_malloc); + compint_from_size(index+index_size, zck->index.hash_type, &index_size); + compint_from_size(index+index_size, zck->index.count, &index_size); + if(zck->index.first) { + zckChunk *tmp = zck->index.first; + while(tmp) { + /* Write digest */ + memcpy(index+index_size, tmp->digest, zck->index.digest_size); + index_size += zck->index.digest_size; + /* Write compressed size */ + compint_from_size(index+index_size, tmp->comp_length, + &index_size); + /* Write uncompressed size */ + compint_from_size(index+index_size, tmp->length, &index_size); + + tmp = tmp->next; + } + } + /* Shrink index to actual size */ + index = zrealloc(index, index_size); + zck->index_string = index; + zck->index_size = index_size; + zck_log(ZCK_LOG_DEBUG, "Generated index: %lu bytes", zck->index_size); + return true; +} + +bool index_new_chunk(zckCtx *zck, zckIndex *index, char *digest, + int digest_size, size_t comp_size, size_t orig_size, + zckChunk *src, bool finished) { + VALIDATE_BOOL(zck); + + if(index == NULL) { + set_error(zck, "Invalid index"); + return false; + } + if(digest_size == 0) { + set_error(zck, "Digest size 0 too small"); + return false; + } + zckChunk *chk = zmalloc(sizeof(zckChunk)); + index->digest_size = digest_size; + chk->comp_length = comp_size; + chk->length = orig_size; + chk->src = src; + return finish_chunk(index, chk, digest, finished, zck); +} + +bool index_add_to_chunk(zckCtx *zck, char *data, size_t comp_size, + size_t orig_size) { + VALIDATE_BOOL(zck); + + if(zck->work_index_item == NULL && !create_chunk(zck)) + return false; + + zck->work_index_item->length += orig_size; + if(comp_size == 0) + return true; + + if(!hash_update(zck, &(zck->full_hash), data, comp_size)) + return false; + if(!hash_update(zck, &(zck->work_index_hash), data, comp_size)) + return false; + + zck->work_index_item->comp_length += comp_size; + return true; +} + +bool index_finish_chunk(zckCtx *zck) { + VALIDATE_BOOL(zck); + + if(zck->work_index_item == NULL && !create_chunk(zck)) + return false; + + char *digest = NULL; + if(zck->work_index_item->length > 0) { + /* Finalize chunk checksum */ + digest = hash_finalize(zck, &(zck->work_index_hash)); + if(digest == NULL) { + set_fatal_error(zck, + "Unable to calculate %s checksum for new chunk", + zck_hash_name_from_type(zck->index.hash_type)); + return false; + } + } else { + digest = zmalloc(zck->chunk_hash_type.digest_size); + } + if(!finish_chunk(&(zck->index), zck->work_index_item, digest, true, zck)) { + free(digest); + return false; + } + + free(digest); + zck->work_index_item = NULL; + hash_close(&(zck->work_index_hash)); + return true; +} diff --git a/src/lib/index/index_read.c b/src/lib/index/index_read.c new file mode 100644 index 0000000..c6ee98b --- /dev/null +++ b/src/lib/index/index_read.c @@ -0,0 +1,265 @@ +/* + * Copyright 2018 Jonathan Dieter + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions are met: + * + * 1. Redistributions of source code must retain the above copyright notice, + * this list of conditions and the following disclaimer. + * + * 2. Redistributions in binary form must reproduce the above copyright notice, + * this list of conditions and the following disclaimer in the documentation + * and/or other materials provided with the distribution. + * + * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" + * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE + * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE + * ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE + * LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR + * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF + * SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS + * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN + * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) + * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE + * POSSIBILITY OF SUCH DAMAGE. + */ + +#include +#include +#include +#include +#ifdef FREEBSD +#include +#else +#include +#endif +#include + +#include "zck_private.h" + +bool index_read(zckCtx *zck, char *data, size_t size, size_t max_length) { + VALIDATE_BOOL(zck); + size_t length = 0; + + /* Read and configure hash type */ + int hash_type = 0; + if(!compint_to_int(zck, &hash_type, data + length, &length, max_length)) { + set_fatal_error(zck, "Unable to read hash type"); + return false; + } + if(!set_chunk_hash_type(zck, hash_type)) { + set_fatal_error(zck, "Unable to set chunk hash type"); + return false; + } + + /* Read number of index entries */ + size_t index_count; + if(!compint_to_size(zck, &index_count, data + length, &length, + max_length)) { + set_fatal_error(zck, "Unable to read index count"); + return false; + } + zck->index.count = index_count; + + zckChunk *prev = zck->index.first; + size_t idx_loc = 0; + int count = 0; + while(length < size) { + if(length + zck->index.digest_size > max_length) { + set_fatal_error(zck, "Read past end of header"); + return false; + } + + zckChunk *tmp = NULL; + zckChunk *new = zmalloc(sizeof(zckChunk)); + + /* Read index entry digest */ + new->digest = zmalloc(zck->index.digest_size); + memcpy(new->digest, data+length, zck->index.digest_size); + new->digest_size = zck->index.digest_size; + HASH_FIND(hh, zck->index.ht, new->digest, new->digest_size, tmp); + if(!tmp) + HASH_ADD_KEYPTR(hh, zck->index.ht, new->digest, new->digest_size, + new); + length += zck->index.digest_size; + + /* Read and store entry length */ + size_t chunk_length = 0; + if(!compint_to_size(zck, &chunk_length, data+length, &length, + max_length)) { + set_fatal_error(zck, "Unable to read chunk %i compressed size", + count); + return false; + } + new->start = idx_loc; + new->comp_length = chunk_length; + + /* Read and store uncompressed entry length */ + chunk_length = 0; + if(!compint_to_size(zck, &chunk_length, data+length, &length, + max_length)) { + set_fatal_error(zck, "Unable to read chunk %i uncompressed size", + count); + return false; + } + new->length = chunk_length; + new->zck = zck; + new->valid = 0; + new->number = count; + idx_loc += new->comp_length; + count++; + zck->index.length = idx_loc; + + if(prev) + prev->next = new; + else + zck->index.first = new; + prev = new; + } + free(zck->index_string); + zck->index_string = NULL; + return true; +} + +ssize_t PUBLIC zck_get_chunk_count(zckCtx *zck) { + VALIDATE_INT(zck); + + return zck->index.count; +} + +zckChunk PUBLIC *zck_get_chunk(zckCtx *zck, size_t number) { + VALIDATE_PTR(zck); + + for(zckChunk *idx=zck->index.first; idx!=NULL; idx=idx->next) { + if(idx->number == number) + return idx; + } + zck_log(ZCK_LOG_WARNING, "Chunk %lu not found", number); + return NULL; +} + +zckChunk PUBLIC *zck_get_first_chunk(zckCtx *zck) { + VALIDATE_PTR(zck); + + return zck->index.first; +} + +zckChunk PUBLIC *zck_get_next_chunk(zckChunk *idx) { + if(idx && idx->zck) { + VALIDATE_PTR(idx->zck); + ALLOCD_PTR(idx->zck, idx); + } else { + ALLOCD_PTR(NULL, idx); + } + + return idx->next; +} + +ssize_t PUBLIC zck_get_chunk_start(zckChunk *idx) { + if(idx && idx->zck) { + VALIDATE_INT(idx->zck); + ALLOCD_INT(idx->zck, idx); + } else { + ALLOCD_INT(NULL, idx); + } + + if(idx->zck) + return idx->start + zck_get_header_length(idx->zck); + else + return idx->start; +} + +ssize_t PUBLIC zck_get_chunk_size(zckChunk *idx) { + if(idx && idx->zck) { + VALIDATE_INT(idx->zck); + ALLOCD_INT(idx->zck, idx); + } else { + ALLOCD_INT(NULL, idx); + } + + return idx->length; +} + +ssize_t PUBLIC zck_get_chunk_comp_size(zckChunk *idx) { + if(idx && idx->zck) { + VALIDATE_INT(idx->zck); + ALLOCD_INT(idx->zck, idx); + } else { + ALLOCD_INT(NULL, idx); + } + + return idx->comp_length; +} + +ssize_t PUBLIC zck_get_chunk_number(zckChunk *idx) { + if(idx && idx->zck) { + VALIDATE_INT(idx->zck); + ALLOCD_INT(idx->zck, idx); + } else { + ALLOCD_INT(NULL, idx); + } + + return idx->number; +} + +int PUBLIC zck_get_chunk_valid(zckChunk *idx) { + if(idx && idx->zck) { + VALIDATE_INT(idx->zck); + ALLOCD_INT(idx->zck, idx); + } else { + ALLOCD_INT(NULL, idx); + } + + return idx->valid; +} + +bool PUBLIC zck_compare_chunk_digest(zckChunk *a, zckChunk *b) { + if(a && a->zck) { + VALIDATE_BOOL(a->zck); + ALLOCD_BOOL(a->zck, a); + } else { + ALLOCD_BOOL(NULL, a); + } + if(b && b->zck) { + VALIDATE_BOOL(b->zck); + ALLOCD_BOOL(b->zck, b); + } else { + ALLOCD_BOOL(NULL, b); + } + + if(a->digest_size != b->digest_size) + return false; + if(memcmp(a->digest, b->digest, a->digest_size) != 0) + return false; + return true; +} + +int PUBLIC zck_missing_chunks(zckCtx *zck) { + VALIDATE_READ_INT(zck); + + int missing = 0; + for(zckChunk *idx = zck->index.first; idx; idx=idx->next) + if(idx->valid == 0) + missing++; + return missing; +} + +int PUBLIC zck_failed_chunks(zckCtx *zck) { + VALIDATE_READ_INT(zck); + + int failed = 0; + for(zckChunk *idx = zck->index.first; idx; idx=idx->next) + if(idx->valid == -1) + failed++; + return failed; +} + +void PUBLIC zck_reset_failed_chunks(zckCtx *zck) { + if(!zck) + return; + + for(zckChunk *idx = zck->index.first; idx; idx=idx->next) + if(idx->valid == -1) + idx->valid = 0; + return; +} diff --git a/src/lib/index/meson.build b/src/lib/index/meson.build new file mode 100644 index 0000000..45b81c9 --- /dev/null +++ b/src/lib/index/meson.build @@ -0,0 +1 @@ +lib_sources += files(['index_create.c', 'index_read.c', 'index_common.c']) diff --git a/src/lib/io.c b/src/lib/io.c new file mode 100644 index 0000000..5925d51 --- /dev/null +++ b/src/lib/io.c @@ -0,0 +1,125 @@ +/* + * Copyright 2018 Jonathan Dieter + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions are met: + * + * 1. Redistributions of source code must retain the above copyright notice, + * this list of conditions and the following disclaimer. + * + * 2. Redistributions in binary form must reproduce the above copyright notice, + * this list of conditions and the following disclaimer in the documentation + * and/or other materials provided with the distribution. + * + * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" + * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE + * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE + * ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE + * LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR + * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF + * SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS + * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN + * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) + * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE + * POSSIBILITY OF SUCH DAMAGE. + */ + +#include +#include +#include +#include +#include +#include +#include + +#include "zck_private.h" + +ssize_t read_data(zckCtx *zck, char *data, size_t length) { + VALIDATE_READ_INT(zck); + + if(length == 0) + return 0; + if(data == NULL) { + set_error(zck, "Unable to read to NULL data pointer"); + return -1; + } + ssize_t read_bytes = read(zck->fd, data, length); + if(read_bytes == -1) { + set_error(zck, "Error reading data: %s", strerror(errno)); + return -1; + } + return read_bytes; +} + +int write_data(zckCtx *zck, int fd, const char *data, size_t length) { + VALIDATE_INT(zck); + + if(length == 0) + return true; + if(data == NULL) { + set_error(zck, "Unable to write from NULL data pointer"); + return false; + } + ssize_t write_bytes = write(fd, data, length); + if(write_bytes == -1) { + set_fatal_error(zck, "Error writing data: %s", strerror(errno)); + return false; + } else if(write_bytes < length) { + // According to man page, if write is less than full amount, we should try again + length -= write_bytes; + write_bytes = write(fd, data+write_bytes, length); + if(write_bytes == -1) { + set_fatal_error(zck, "Error writing data: %s", strerror(errno)); + return false; + } else if(write_bytes < length) { + set_fatal_error(zck, "Short write (after two attempts)"); + return false; + } + } + return true; +} + +int seek_data(zckCtx *zck, off_t offset, int whence) { + VALIDATE_INT(zck); + + if(lseek(zck->fd, offset, whence) == -1) { + char *wh_str = NULL; + + if(whence == SEEK_CUR) { + wh_str = "from current position"; + } else if(whence == SEEK_END) { + wh_str = "from end of file"; + } else if(whence == SEEK_SET) { + wh_str = "from beginning of file"; + } else { + wh_str = "using unknown measurement"; + } + set_error(zck, "Unable to seek to %lu %s: %s", offset, wh_str, + strerror(errno)); + return false; + } + return true; +} + +ssize_t tell_data(zckCtx *zck) { + ssize_t loc = lseek(zck->fd, 0, SEEK_CUR); + return loc; +} + +int chunks_from_temp(zckCtx *zck) { + int read_count; + + if(lseek(zck->temp_fd, 0, SEEK_SET) == -1) + return false; + + char *data = zmalloc(BUF_SIZE); + + while((read_count = read(zck->temp_fd, data, BUF_SIZE)) > 0) { + if(read_count == -1 || !write_data(zck, zck->fd, data, read_count)) { + free(data); + return false; + } + } + free(data); + return true; +} diff --git a/src/lib/log.c b/src/lib/log.c new file mode 100644 index 0000000..b6598d8 --- /dev/null +++ b/src/lib/log.c @@ -0,0 +1,62 @@ +/* + * Copyright 2018 Jonathan Dieter + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions are met: + * + * 1. Redistributions of source code must retain the above copyright notice, + * this list of conditions and the following disclaimer. + * + * 2. Redistributions in binary form must reproduce the above copyright notice, + * this list of conditions and the following disclaimer in the documentation + * and/or other materials provided with the distribution. + * + * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" + * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE + * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE + * ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE + * LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR + * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF + * SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS + * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN + * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) + * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE + * POSSIBILITY OF SUCH DAMAGE. + */ + +#include +#include +#include +#include +#include +#include + +#include "zck_private.h" + +static zck_log_type log_level = ZCK_LOG_ERROR; +static int log_fd = STDERR_FILENO; + +void PUBLIC zck_set_log_level(zck_log_type ll) { + log_level = ll; +} + +void PUBLIC zck_set_log_fd(int fd) { + log_fd = fd; +} + +void zck_log_v(const char *function, zck_log_type lt, const char *format, + va_list args) { + if(lt < log_level || log_level == ZCK_LOG_ERROR) + return; + + dprintf(log_fd, "%s: ", function); + vdprintf(log_fd, format, args); + dprintf(log_fd, "\n"); +} + +void zck_log_wf(const char *function, zck_log_type lt, const char *format, ...) { + va_list args; + va_start(args, format); + zck_log_v(function, lt, format, args); + va_end(args); +} diff --git a/src/lib/meson.build b/src/lib/meson.build new file mode 100644 index 0000000..e070c37 --- /dev/null +++ b/src/lib/meson.build @@ -0,0 +1,15 @@ +lib_sources = files() +add_global_arguments('-fvisibility=hidden', language : 'c') +subdir('buzhash') +subdir('comp') +subdir('hash') +subdir('index') +subdir('dl') +lib_sources += files('zck.c', 'header.c', 'io.c', 'log.c', 'compint.c', 'error.c') +zcklib = library('zck', + lib_sources, + include_directories: inc, + dependencies: [zstd_dep, openssl_dep], + install: true, + version: meson.project_version(), + soversion: so_version) diff --git a/src/lib/uthash.h b/src/lib/uthash.h new file mode 100644 index 0000000..76bdca6 --- /dev/null +++ b/src/lib/uthash.h @@ -0,0 +1,1227 @@ +/* +Copyright (c) 2003-2018, Troy D. Hanson http://troydhanson.github.com/uthash/ +All rights reserved. + +Redistribution and use in source and binary forms, with or without +modification, are permitted provided that the following conditions are met: + + * Redistributions of source code must retain the above copyright + notice, this list of conditions and the following disclaimer. + +THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS +IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED +TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A +PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER +OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, +EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, +PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR +PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF +LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING +NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS +SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. +*/ + +#ifndef UTHASH_H +#define UTHASH_H + +#define UTHASH_VERSION 2.1.0 + +#include /* memcmp, memset, strlen */ +#include /* ptrdiff_t */ +#include /* exit */ + +/* These macros use decltype or the earlier __typeof GNU extension. + As decltype is only available in newer compilers (VS2010 or gcc 4.3+ + when compiling c++ source) this code uses whatever method is needed + or, for VS2008 where neither is available, uses casting workarounds. */ +#if !defined(DECLTYPE) && !defined(NO_DECLTYPE) +#if defined(_MSC_VER) /* MS compiler */ +#if _MSC_VER >= 1600 && defined(__cplusplus) /* VS2010 or newer in C++ mode */ +#define DECLTYPE(x) (decltype(x)) +#else /* VS2008 or older (or VS2010 in C mode) */ +#define NO_DECLTYPE +#endif +#elif defined(__BORLANDC__) || defined(__ICCARM__) || defined(__LCC__) || defined(__WATCOMC__) +#define NO_DECLTYPE +#else /* GNU, Sun and other compilers */ +#define DECLTYPE(x) (__typeof(x)) +#endif +#endif + +#ifdef NO_DECLTYPE +#define DECLTYPE(x) +#define DECLTYPE_ASSIGN(dst,src) \ +do { \ + char **_da_dst = (char**)(&(dst)); \ + *_da_dst = (char*)(src); \ +} while (0) +#else +#define DECLTYPE_ASSIGN(dst,src) \ +do { \ + (dst) = DECLTYPE(dst)(src); \ +} while (0) +#endif + +/* a number of the hash function use uint32_t which isn't defined on Pre VS2010 */ +#if defined(_WIN32) +#if defined(_MSC_VER) && _MSC_VER >= 1600 +#include +#elif defined(__WATCOMC__) || defined(__MINGW32__) || defined(__CYGWIN__) +#include +#else +typedef unsigned int uint32_t; +typedef unsigned char uint8_t; +#endif +#elif defined(__GNUC__) && !defined(__VXWORKS__) +#include +#else +typedef unsigned int uint32_t; +typedef unsigned char uint8_t; +#endif + +#ifndef uthash_malloc +#define uthash_malloc(sz) malloc(sz) /* malloc fcn */ +#endif +#ifndef uthash_free +#define uthash_free(ptr,sz) free(ptr) /* free fcn */ +#endif +#ifndef uthash_bzero +#define uthash_bzero(a,n) memset(a,'\0',n) +#endif +#ifndef uthash_strlen +#define uthash_strlen(s) strlen(s) +#endif + +#ifdef uthash_memcmp +/* This warning will not catch programs that define uthash_memcmp AFTER including uthash.h. */ +#warning "uthash_memcmp is deprecated; please use HASH_KEYCMP instead" +#else +#define uthash_memcmp(a,b,n) memcmp(a,b,n) +#endif + +#ifndef HASH_KEYCMP +#define HASH_KEYCMP(a,b,n) uthash_memcmp(a,b,n) +#endif + +#ifndef uthash_noexpand_fyi +#define uthash_noexpand_fyi(tbl) /* can be defined to log noexpand */ +#endif +#ifndef uthash_expand_fyi +#define uthash_expand_fyi(tbl) /* can be defined to log expands */ +#endif + +#ifndef HASH_NONFATAL_OOM +#define HASH_NONFATAL_OOM 0 +#endif + +#if HASH_NONFATAL_OOM +/* malloc failures can be recovered from */ + +#ifndef uthash_nonfatal_oom +#define uthash_nonfatal_oom(obj) do {} while (0) /* non-fatal OOM error */ +#endif + +#define HASH_RECORD_OOM(oomed) do { (oomed) = 1; } while (0) +#define IF_HASH_NONFATAL_OOM(x) x + +#else +/* malloc failures result in lost memory, hash tables are unusable */ + +#ifndef uthash_fatal +#define uthash_fatal(msg) exit(-1) /* fatal OOM error */ +#endif + +#define HASH_RECORD_OOM(oomed) uthash_fatal("out of memory") +#define IF_HASH_NONFATAL_OOM(x) + +#endif + +/* initial number of buckets */ +#define HASH_INITIAL_NUM_BUCKETS 32U /* initial number of buckets */ +#define HASH_INITIAL_NUM_BUCKETS_LOG2 5U /* lg2 of initial number of buckets */ +#define HASH_BKT_CAPACITY_THRESH 10U /* expand when bucket count reaches */ + +/* calculate the element whose hash handle address is hhp */ +#define ELMT_FROM_HH(tbl,hhp) ((void*)(((char*)(hhp)) - ((tbl)->hho))) +/* calculate the hash handle from element address elp */ +#define HH_FROM_ELMT(tbl,elp) ((UT_hash_handle *)(((char*)(elp)) + ((tbl)->hho))) + +#define HASH_ROLLBACK_BKT(hh, head, itemptrhh) \ +do { \ + struct UT_hash_handle *_hd_hh_item = (itemptrhh); \ + unsigned _hd_bkt; \ + HASH_TO_BKT(_hd_hh_item->hashv, (head)->hh.tbl->num_buckets, _hd_bkt); \ + (head)->hh.tbl->buckets[_hd_bkt].count++; \ + _hd_hh_item->hh_next = NULL; \ + _hd_hh_item->hh_prev = NULL; \ +} while (0) + +#define HASH_VALUE(keyptr,keylen,hashv) \ +do { \ + HASH_FCN(keyptr, keylen, hashv); \ +} while (0) + +#define HASH_FIND_BYHASHVALUE(hh,head,keyptr,keylen,hashval,out) \ +do { \ + (out) = NULL; \ + if (head) { \ + unsigned _hf_bkt; \ + HASH_TO_BKT(hashval, (head)->hh.tbl->num_buckets, _hf_bkt); \ + if (HASH_BLOOM_TEST((head)->hh.tbl, hashval) != 0) { \ + HASH_FIND_IN_BKT((head)->hh.tbl, hh, (head)->hh.tbl->buckets[ _hf_bkt ], keyptr, keylen, hashval, out); \ + } \ + } \ +} while (0) + +#define HASH_FIND(hh,head,keyptr,keylen,out) \ +do { \ + unsigned _hf_hashv; \ + HASH_VALUE(keyptr, keylen, _hf_hashv); \ + HASH_FIND_BYHASHVALUE(hh, head, keyptr, keylen, _hf_hashv, out); \ +} while (0) + +#ifdef HASH_BLOOM +#define HASH_BLOOM_BITLEN (1UL << HASH_BLOOM) +#define HASH_BLOOM_BYTELEN (HASH_BLOOM_BITLEN/8UL) + (((HASH_BLOOM_BITLEN%8UL)!=0UL) ? 1UL : 0UL) +#define HASH_BLOOM_MAKE(tbl,oomed) \ +do { \ + (tbl)->bloom_nbits = HASH_BLOOM; \ + (tbl)->bloom_bv = (uint8_t*)uthash_malloc(HASH_BLOOM_BYTELEN); \ + if (!(tbl)->bloom_bv) { \ + HASH_RECORD_OOM(oomed); \ + } else { \ + uthash_bzero((tbl)->bloom_bv, HASH_BLOOM_BYTELEN); \ + (tbl)->bloom_sig = HASH_BLOOM_SIGNATURE; \ + } \ +} while (0) + +#define HASH_BLOOM_FREE(tbl) \ +do { \ + uthash_free((tbl)->bloom_bv, HASH_BLOOM_BYTELEN); \ +} while (0) + +#define HASH_BLOOM_BITSET(bv,idx) (bv[(idx)/8U] |= (1U << ((idx)%8U))) +#define HASH_BLOOM_BITTEST(bv,idx) (bv[(idx)/8U] & (1U << ((idx)%8U))) + +#define HASH_BLOOM_ADD(tbl,hashv) \ + HASH_BLOOM_BITSET((tbl)->bloom_bv, ((hashv) & (uint32_t)((1UL << (tbl)->bloom_nbits) - 1U))) + +#define HASH_BLOOM_TEST(tbl,hashv) \ + HASH_BLOOM_BITTEST((tbl)->bloom_bv, ((hashv) & (uint32_t)((1UL << (tbl)->bloom_nbits) - 1U))) + +#else +#define HASH_BLOOM_MAKE(tbl,oomed) +#define HASH_BLOOM_FREE(tbl) +#define HASH_BLOOM_ADD(tbl,hashv) +#define HASH_BLOOM_TEST(tbl,hashv) (1) +#define HASH_BLOOM_BYTELEN 0U +#endif + +#define HASH_MAKE_TABLE(hh,head,oomed) \ +do { \ + (head)->hh.tbl = (UT_hash_table*)uthash_malloc(sizeof(UT_hash_table)); \ + if (!(head)->hh.tbl) { \ + HASH_RECORD_OOM(oomed); \ + } else { \ + uthash_bzero((head)->hh.tbl, sizeof(UT_hash_table)); \ + (head)->hh.tbl->tail = &((head)->hh); \ + (head)->hh.tbl->num_buckets = HASH_INITIAL_NUM_BUCKETS; \ + (head)->hh.tbl->log2_num_buckets = HASH_INITIAL_NUM_BUCKETS_LOG2; \ + (head)->hh.tbl->hho = (char*)(&(head)->hh) - (char*)(head); \ + (head)->hh.tbl->buckets = (UT_hash_bucket*)uthash_malloc( \ + HASH_INITIAL_NUM_BUCKETS * sizeof(struct UT_hash_bucket)); \ + (head)->hh.tbl->signature = HASH_SIGNATURE; \ + if (!(head)->hh.tbl->buckets) { \ + HASH_RECORD_OOM(oomed); \ + uthash_free((head)->hh.tbl, sizeof(UT_hash_table)); \ + } else { \ + uthash_bzero((head)->hh.tbl->buckets, \ + HASH_INITIAL_NUM_BUCKETS * sizeof(struct UT_hash_bucket)); \ + HASH_BLOOM_MAKE((head)->hh.tbl, oomed); \ + IF_HASH_NONFATAL_OOM( \ + if (oomed) { \ + uthash_free((head)->hh.tbl->buckets, \ + HASH_INITIAL_NUM_BUCKETS*sizeof(struct UT_hash_bucket)); \ + uthash_free((head)->hh.tbl, sizeof(UT_hash_table)); \ + } \ + ) \ + } \ + } \ +} while (0) + +#define HASH_REPLACE_BYHASHVALUE_INORDER(hh,head,fieldname,keylen_in,hashval,add,replaced,cmpfcn) \ +do { \ + (replaced) = NULL; \ + HASH_FIND_BYHASHVALUE(hh, head, &((add)->fieldname), keylen_in, hashval, replaced); \ + if (replaced) { \ + HASH_DELETE(hh, head, replaced); \ + } \ + HASH_ADD_KEYPTR_BYHASHVALUE_INORDER(hh, head, &((add)->fieldname), keylen_in, hashval, add, cmpfcn); \ +} while (0) + +#define HASH_REPLACE_BYHASHVALUE(hh,head,fieldname,keylen_in,hashval,add,replaced) \ +do { \ + (replaced) = NULL; \ + HASH_FIND_BYHASHVALUE(hh, head, &((add)->fieldname), keylen_in, hashval, replaced); \ + if (replaced) { \ + HASH_DELETE(hh, head, replaced); \ + } \ + HASH_ADD_KEYPTR_BYHASHVALUE(hh, head, &((add)->fieldname), keylen_in, hashval, add); \ +} while (0) + +#define HASH_REPLACE(hh,head,fieldname,keylen_in,add,replaced) \ +do { \ + unsigned _hr_hashv; \ + HASH_VALUE(&((add)->fieldname), keylen_in, _hr_hashv); \ + HASH_REPLACE_BYHASHVALUE(hh, head, fieldname, keylen_in, _hr_hashv, add, replaced); \ +} while (0) + +#define HASH_REPLACE_INORDER(hh,head,fieldname,keylen_in,add,replaced,cmpfcn) \ +do { \ + unsigned _hr_hashv; \ + HASH_VALUE(&((add)->fieldname), keylen_in, _hr_hashv); \ + HASH_REPLACE_BYHASHVALUE_INORDER(hh, head, fieldname, keylen_in, _hr_hashv, add, replaced, cmpfcn); \ +} while (0) + +#define HASH_APPEND_LIST(hh, head, add) \ +do { \ + (add)->hh.next = NULL; \ + (add)->hh.prev = ELMT_FROM_HH((head)->hh.tbl, (head)->hh.tbl->tail); \ + (head)->hh.tbl->tail->next = (add); \ + (head)->hh.tbl->tail = &((add)->hh); \ +} while (0) + +#define HASH_AKBI_INNER_LOOP(hh,head,add,cmpfcn) \ +do { \ + do { \ + if (cmpfcn(DECLTYPE(head)(_hs_iter), add) > 0) { \ + break; \ + } \ + } while ((_hs_iter = HH_FROM_ELMT((head)->hh.tbl, _hs_iter)->next)); \ +} while (0) + +#ifdef NO_DECLTYPE +#undef HASH_AKBI_INNER_LOOP +#define HASH_AKBI_INNER_LOOP(hh,head,add,cmpfcn) \ +do { \ + char *_hs_saved_head = (char*)(head); \ + do { \ + DECLTYPE_ASSIGN(head, _hs_iter); \ + if (cmpfcn(head, add) > 0) { \ + DECLTYPE_ASSIGN(head, _hs_saved_head); \ + break; \ + } \ + DECLTYPE_ASSIGN(head, _hs_saved_head); \ + } while ((_hs_iter = HH_FROM_ELMT((head)->hh.tbl, _hs_iter)->next)); \ +} while (0) +#endif + +#if HASH_NONFATAL_OOM + +#define HASH_ADD_TO_TABLE(hh,head,keyptr,keylen_in,hashval,add,oomed) \ +do { \ + if (!(oomed)) { \ + unsigned _ha_bkt; \ + (head)->hh.tbl->num_items++; \ + HASH_TO_BKT(hashval, (head)->hh.tbl->num_buckets, _ha_bkt); \ + HASH_ADD_TO_BKT((head)->hh.tbl->buckets[_ha_bkt], hh, &(add)->hh, oomed); \ + if (oomed) { \ + HASH_ROLLBACK_BKT(hh, head, &(add)->hh); \ + HASH_DELETE_HH(hh, head, &(add)->hh); \ + (add)->hh.tbl = NULL; \ + uthash_nonfatal_oom(add); \ + } else { \ + HASH_BLOOM_ADD((head)->hh.tbl, hashval); \ + HASH_EMIT_KEY(hh, head, keyptr, keylen_in); \ + } \ + } else { \ + (add)->hh.tbl = NULL; \ + uthash_nonfatal_oom(add); \ + } \ +} while (0) + +#else + +#define HASH_ADD_TO_TABLE(hh,head,keyptr,keylen_in,hashval,add,oomed) \ +do { \ + unsigned _ha_bkt; \ + (head)->hh.tbl->num_items++; \ + HASH_TO_BKT(hashval, (head)->hh.tbl->num_buckets, _ha_bkt); \ + HASH_ADD_TO_BKT((head)->hh.tbl->buckets[_ha_bkt], hh, &(add)->hh, oomed); \ + HASH_BLOOM_ADD((head)->hh.tbl, hashval); \ + HASH_EMIT_KEY(hh, head, keyptr, keylen_in); \ +} while (0) + +#endif + + +#define HASH_ADD_KEYPTR_BYHASHVALUE_INORDER(hh,head,keyptr,keylen_in,hashval,add,cmpfcn) \ +do { \ + IF_HASH_NONFATAL_OOM( int _ha_oomed = 0; ) \ + (add)->hh.hashv = (hashval); \ + (add)->hh.key = (char*) (keyptr); \ + (add)->hh.keylen = (unsigned) (keylen_in); \ + if (!(head)) { \ + (add)->hh.next = NULL; \ + (add)->hh.prev = NULL; \ + HASH_MAKE_TABLE(hh, add, _ha_oomed); \ + IF_HASH_NONFATAL_OOM( if (!_ha_oomed) { ) \ + (head) = (add); \ + IF_HASH_NONFATAL_OOM( } ) \ + } else { \ + void *_hs_iter = (head); \ + (add)->hh.tbl = (head)->hh.tbl; \ + HASH_AKBI_INNER_LOOP(hh, head, add, cmpfcn); \ + if (_hs_iter) { \ + (add)->hh.next = _hs_iter; \ + if (((add)->hh.prev = HH_FROM_ELMT((head)->hh.tbl, _hs_iter)->prev)) { \ + HH_FROM_ELMT((head)->hh.tbl, (add)->hh.prev)->next = (add); \ + } else { \ + (head) = (add); \ + } \ + HH_FROM_ELMT((head)->hh.tbl, _hs_iter)->prev = (add); \ + } else { \ + HASH_APPEND_LIST(hh, head, add); \ + } \ + } \ + HASH_ADD_TO_TABLE(hh, head, keyptr, keylen_in, hashval, add, _ha_oomed); \ + HASH_FSCK(hh, head, "HASH_ADD_KEYPTR_BYHASHVALUE_INORDER"); \ +} while (0) + +#define HASH_ADD_KEYPTR_INORDER(hh,head,keyptr,keylen_in,add,cmpfcn) \ +do { \ + unsigned _hs_hashv; \ + HASH_VALUE(keyptr, keylen_in, _hs_hashv); \ + HASH_ADD_KEYPTR_BYHASHVALUE_INORDER(hh, head, keyptr, keylen_in, _hs_hashv, add, cmpfcn); \ +} while (0) + +#define HASH_ADD_BYHASHVALUE_INORDER(hh,head,fieldname,keylen_in,hashval,add,cmpfcn) \ + HASH_ADD_KEYPTR_BYHASHVALUE_INORDER(hh, head, &((add)->fieldname), keylen_in, hashval, add, cmpfcn) + +#define HASH_ADD_INORDER(hh,head,fieldname,keylen_in,add,cmpfcn) \ + HASH_ADD_KEYPTR_INORDER(hh, head, &((add)->fieldname), keylen_in, add, cmpfcn) + +#define HASH_ADD_KEYPTR_BYHASHVALUE(hh,head,keyptr,keylen_in,hashval,add) \ +do { \ + IF_HASH_NONFATAL_OOM( int _ha_oomed = 0; ) \ + (add)->hh.hashv = (hashval); \ + (add)->hh.key = (char*) (keyptr); \ + (add)->hh.keylen = (unsigned) (keylen_in); \ + if (!(head)) { \ + (add)->hh.next = NULL; \ + (add)->hh.prev = NULL; \ + HASH_MAKE_TABLE(hh, add, _ha_oomed); \ + IF_HASH_NONFATAL_OOM( if (!_ha_oomed) { ) \ + (head) = (add); \ + IF_HASH_NONFATAL_OOM( } ) \ + } else { \ + (add)->hh.tbl = (head)->hh.tbl; \ + HASH_APPEND_LIST(hh, head, add); \ + } \ + HASH_ADD_TO_TABLE(hh, head, keyptr, keylen_in, hashval, add, _ha_oomed); \ + HASH_FSCK(hh, head, "HASH_ADD_KEYPTR_BYHASHVALUE"); \ +} while (0) + +#define HASH_ADD_KEYPTR(hh,head,keyptr,keylen_in,add) \ +do { \ + unsigned _ha_hashv; \ + HASH_VALUE(keyptr, keylen_in, _ha_hashv); \ + HASH_ADD_KEYPTR_BYHASHVALUE(hh, head, keyptr, keylen_in, _ha_hashv, add); \ +} while (0) + +#define HASH_ADD_BYHASHVALUE(hh,head,fieldname,keylen_in,hashval,add) \ + HASH_ADD_KEYPTR_BYHASHVALUE(hh, head, &((add)->fieldname), keylen_in, hashval, add) + +#define HASH_ADD(hh,head,fieldname,keylen_in,add) \ + HASH_ADD_KEYPTR(hh, head, &((add)->fieldname), keylen_in, add) + +#define HASH_TO_BKT(hashv,num_bkts,bkt) \ +do { \ + bkt = ((hashv) & ((num_bkts) - 1U)); \ +} while (0) + +/* delete "delptr" from the hash table. + * "the usual" patch-up process for the app-order doubly-linked-list. + * The use of _hd_hh_del below deserves special explanation. + * These used to be expressed using (delptr) but that led to a bug + * if someone used the same symbol for the head and deletee, like + * HASH_DELETE(hh,users,users); + * We want that to work, but by changing the head (users) below + * we were forfeiting our ability to further refer to the deletee (users) + * in the patch-up process. Solution: use scratch space to + * copy the deletee pointer, then the latter references are via that + * scratch pointer rather than through the repointed (users) symbol. + */ +#define HASH_DELETE(hh,head,delptr) \ + HASH_DELETE_HH(hh, head, &(delptr)->hh) + +#define HASH_DELETE_HH(hh,head,delptrhh) \ +do { \ + struct UT_hash_handle *_hd_hh_del = (delptrhh); \ + if ((_hd_hh_del->prev == NULL) && (_hd_hh_del->next == NULL)) { \ + HASH_BLOOM_FREE((head)->hh.tbl); \ + uthash_free((head)->hh.tbl->buckets, \ + (head)->hh.tbl->num_buckets * sizeof(struct UT_hash_bucket)); \ + uthash_free((head)->hh.tbl, sizeof(UT_hash_table)); \ + (head) = NULL; \ + } else { \ + unsigned _hd_bkt; \ + if (_hd_hh_del == (head)->hh.tbl->tail) { \ + (head)->hh.tbl->tail = HH_FROM_ELMT((head)->hh.tbl, _hd_hh_del->prev); \ + } \ + if (_hd_hh_del->prev != NULL) { \ + HH_FROM_ELMT((head)->hh.tbl, _hd_hh_del->prev)->next = _hd_hh_del->next; \ + } else { \ + DECLTYPE_ASSIGN(head, _hd_hh_del->next); \ + } \ + if (_hd_hh_del->next != NULL) { \ + HH_FROM_ELMT((head)->hh.tbl, _hd_hh_del->next)->prev = _hd_hh_del->prev; \ + } \ + HASH_TO_BKT(_hd_hh_del->hashv, (head)->hh.tbl->num_buckets, _hd_bkt); \ + HASH_DEL_IN_BKT((head)->hh.tbl->buckets[_hd_bkt], _hd_hh_del); \ + (head)->hh.tbl->num_items--; \ + } \ + HASH_FSCK(hh, head, "HASH_DELETE_HH"); \ +} while (0) + +/* convenience forms of HASH_FIND/HASH_ADD/HASH_DEL */ +#define HASH_FIND_STR(head,findstr,out) \ +do { \ + unsigned _uthash_hfstr_keylen = (unsigned)uthash_strlen(findstr); \ + HASH_FIND(hh, head, findstr, _uthash_hfstr_keylen, out); \ +} while (0) +#define HASH_ADD_STR(head,strfield,add) \ +do { \ + unsigned _uthash_hastr_keylen = (unsigned)uthash_strlen((add)->strfield); \ + HASH_ADD(hh, head, strfield[0], _uthash_hastr_keylen, add); \ +} while (0) +#define HASH_REPLACE_STR(head,strfield,add,replaced) \ +do { \ + unsigned _uthash_hrstr_keylen = (unsigned)uthash_strlen((add)->strfield); \ + HASH_REPLACE(hh, head, strfield[0], _uthash_hrstr_keylen, add, replaced); \ +} while (0) +#define HASH_FIND_INT(head,findint,out) \ + HASH_FIND(hh,head,findint,sizeof(int),out) +#define HASH_ADD_INT(head,intfield,add) \ + HASH_ADD(hh,head,intfield,sizeof(int),add) +#define HASH_REPLACE_INT(head,intfield,add,replaced) \ + HASH_REPLACE(hh,head,intfield,sizeof(int),add,replaced) +#define HASH_FIND_PTR(head,findptr,out) \ + HASH_FIND(hh,head,findptr,sizeof(void *),out) +#define HASH_ADD_PTR(head,ptrfield,add) \ + HASH_ADD(hh,head,ptrfield,sizeof(void *),add) +#define HASH_REPLACE_PTR(head,ptrfield,add,replaced) \ + HASH_REPLACE(hh,head,ptrfield,sizeof(void *),add,replaced) +#define HASH_DEL(head,delptr) \ + HASH_DELETE(hh,head,delptr) + +/* HASH_FSCK checks hash integrity on every add/delete when HASH_DEBUG is defined. + * This is for uthash developer only; it compiles away if HASH_DEBUG isn't defined. + */ +#ifdef HASH_DEBUG +#define HASH_OOPS(...) do { fprintf(stderr,__VA_ARGS__); exit(-1); } while (0) +#define HASH_FSCK(hh,head,where) \ +do { \ + struct UT_hash_handle *_thh; \ + if (head) { \ + unsigned _bkt_i; \ + unsigned _count = 0; \ + char *_prev; \ + for (_bkt_i = 0; _bkt_i < (head)->hh.tbl->num_buckets; ++_bkt_i) { \ + unsigned _bkt_count = 0; \ + _thh = (head)->hh.tbl->buckets[_bkt_i].hh_head; \ + _prev = NULL; \ + while (_thh) { \ + if (_prev != (char*)(_thh->hh_prev)) { \ + HASH_OOPS("%s: invalid hh_prev %p, actual %p\n", \ + (where), (void*)_thh->hh_prev, (void*)_prev); \ + } \ + _bkt_count++; \ + _prev = (char*)(_thh); \ + _thh = _thh->hh_next; \ + } \ + _count += _bkt_count; \ + if ((head)->hh.tbl->buckets[_bkt_i].count != _bkt_count) { \ + HASH_OOPS("%s: invalid bucket count %u, actual %u\n", \ + (where), (head)->hh.tbl->buckets[_bkt_i].count, _bkt_count); \ + } \ + } \ + if (_count != (head)->hh.tbl->num_items) { \ + HASH_OOPS("%s: invalid hh item count %u, actual %u\n", \ + (where), (head)->hh.tbl->num_items, _count); \ + } \ + _count = 0; \ + _prev = NULL; \ + _thh = &(head)->hh; \ + while (_thh) { \ + _count++; \ + if (_prev != (char*)_thh->prev) { \ + HASH_OOPS("%s: invalid prev %p, actual %p\n", \ + (where), (void*)_thh->prev, (void*)_prev); \ + } \ + _prev = (char*)ELMT_FROM_HH((head)->hh.tbl, _thh); \ + _thh = (_thh->next ? HH_FROM_ELMT((head)->hh.tbl, _thh->next) : NULL); \ + } \ + if (_count != (head)->hh.tbl->num_items) { \ + HASH_OOPS("%s: invalid app item count %u, actual %u\n", \ + (where), (head)->hh.tbl->num_items, _count); \ + } \ + } \ +} while (0) +#else +#define HASH_FSCK(hh,head,where) +#endif + +/* When compiled with -DHASH_EMIT_KEYS, length-prefixed keys are emitted to + * the descriptor to which this macro is defined for tuning the hash function. + * The app can #include to get the prototype for write(2). */ +#ifdef HASH_EMIT_KEYS +#define HASH_EMIT_KEY(hh,head,keyptr,fieldlen) \ +do { \ + unsigned _klen = fieldlen; \ + write(HASH_EMIT_KEYS, &_klen, sizeof(_klen)); \ + write(HASH_EMIT_KEYS, keyptr, (unsigned long)fieldlen); \ +} while (0) +#else +#define HASH_EMIT_KEY(hh,head,keyptr,fieldlen) +#endif + +/* default to Jenkin's hash unless overridden e.g. DHASH_FUNCTION=HASH_SAX */ +#ifdef HASH_FUNCTION +#define HASH_FCN HASH_FUNCTION +#else +#define HASH_FCN HASH_JEN +#endif + +/* The Bernstein hash function, used in Perl prior to v5.6. Note (x<<5+x)=x*33. */ +#define HASH_BER(key,keylen,hashv) \ +do { \ + unsigned _hb_keylen = (unsigned)keylen; \ + const unsigned char *_hb_key = (const unsigned char*)(key); \ + (hashv) = 0; \ + while (_hb_keylen-- != 0U) { \ + (hashv) = (((hashv) << 5) + (hashv)) + *_hb_key++; \ + } \ +} while (0) + + +/* SAX/FNV/OAT/JEN hash functions are macro variants of those listed at + * http://eternallyconfuzzled.com/tuts/algorithms/jsw_tut_hashing.aspx */ +#define HASH_SAX(key,keylen,hashv) \ +do { \ + unsigned _sx_i; \ + const unsigned char *_hs_key = (const unsigned char*)(key); \ + hashv = 0; \ + for (_sx_i=0; _sx_i < keylen; _sx_i++) { \ + hashv ^= (hashv << 5) + (hashv >> 2) + _hs_key[_sx_i]; \ + } \ +} while (0) +/* FNV-1a variation */ +#define HASH_FNV(key,keylen,hashv) \ +do { \ + unsigned _fn_i; \ + const unsigned char *_hf_key = (const unsigned char*)(key); \ + (hashv) = 2166136261U; \ + for (_fn_i=0; _fn_i < keylen; _fn_i++) { \ + hashv = hashv ^ _hf_key[_fn_i]; \ + hashv = hashv * 16777619U; \ + } \ +} while (0) + +#define HASH_OAT(key,keylen,hashv) \ +do { \ + unsigned _ho_i; \ + const unsigned char *_ho_key=(const unsigned char*)(key); \ + hashv = 0; \ + for(_ho_i=0; _ho_i < keylen; _ho_i++) { \ + hashv += _ho_key[_ho_i]; \ + hashv += (hashv << 10); \ + hashv ^= (hashv >> 6); \ + } \ + hashv += (hashv << 3); \ + hashv ^= (hashv >> 11); \ + hashv += (hashv << 15); \ +} while (0) + +#define HASH_JEN_MIX(a,b,c) \ +do { \ + a -= b; a -= c; a ^= ( c >> 13 ); \ + b -= c; b -= a; b ^= ( a << 8 ); \ + c -= a; c -= b; c ^= ( b >> 13 ); \ + a -= b; a -= c; a ^= ( c >> 12 ); \ + b -= c; b -= a; b ^= ( a << 16 ); \ + c -= a; c -= b; c ^= ( b >> 5 ); \ + a -= b; a -= c; a ^= ( c >> 3 ); \ + b -= c; b -= a; b ^= ( a << 10 ); \ + c -= a; c -= b; c ^= ( b >> 15 ); \ +} while (0) + +#define HASH_JEN(key,keylen,hashv) \ +do { \ + unsigned _hj_i,_hj_j,_hj_k; \ + unsigned const char *_hj_key=(unsigned const char*)(key); \ + hashv = 0xfeedbeefu; \ + _hj_i = _hj_j = 0x9e3779b9u; \ + _hj_k = (unsigned)(keylen); \ + while (_hj_k >= 12U) { \ + _hj_i += (_hj_key[0] + ( (unsigned)_hj_key[1] << 8 ) \ + + ( (unsigned)_hj_key[2] << 16 ) \ + + ( (unsigned)_hj_key[3] << 24 ) ); \ + _hj_j += (_hj_key[4] + ( (unsigned)_hj_key[5] << 8 ) \ + + ( (unsigned)_hj_key[6] << 16 ) \ + + ( (unsigned)_hj_key[7] << 24 ) ); \ + hashv += (_hj_key[8] + ( (unsigned)_hj_key[9] << 8 ) \ + + ( (unsigned)_hj_key[10] << 16 ) \ + + ( (unsigned)_hj_key[11] << 24 ) ); \ + \ + HASH_JEN_MIX(_hj_i, _hj_j, hashv); \ + \ + _hj_key += 12; \ + _hj_k -= 12U; \ + } \ + hashv += (unsigned)(keylen); \ + switch ( _hj_k ) { \ + case 11: hashv += ( (unsigned)_hj_key[10] << 24 ); /* FALLTHROUGH */ \ + case 10: hashv += ( (unsigned)_hj_key[9] << 16 ); /* FALLTHROUGH */ \ + case 9: hashv += ( (unsigned)_hj_key[8] << 8 ); /* FALLTHROUGH */ \ + case 8: _hj_j += ( (unsigned)_hj_key[7] << 24 ); /* FALLTHROUGH */ \ + case 7: _hj_j += ( (unsigned)_hj_key[6] << 16 ); /* FALLTHROUGH */ \ + case 6: _hj_j += ( (unsigned)_hj_key[5] << 8 ); /* FALLTHROUGH */ \ + case 5: _hj_j += _hj_key[4]; /* FALLTHROUGH */ \ + case 4: _hj_i += ( (unsigned)_hj_key[3] << 24 ); /* FALLTHROUGH */ \ + case 3: _hj_i += ( (unsigned)_hj_key[2] << 16 ); /* FALLTHROUGH */ \ + case 2: _hj_i += ( (unsigned)_hj_key[1] << 8 ); /* FALLTHROUGH */ \ + case 1: _hj_i += _hj_key[0]; \ + } \ + HASH_JEN_MIX(_hj_i, _hj_j, hashv); \ +} while (0) + +/* The Paul Hsieh hash function */ +#undef get16bits +#if (defined(__GNUC__) && defined(__i386__)) || defined(__WATCOMC__) \ + || defined(_MSC_VER) || defined (__BORLANDC__) || defined (__TURBOC__) +#define get16bits(d) (*((const uint16_t *) (d))) +#endif + +#if !defined (get16bits) +#define get16bits(d) ((((uint32_t)(((const uint8_t *)(d))[1])) << 8) \ + +(uint32_t)(((const uint8_t *)(d))[0]) ) +#endif +#define HASH_SFH(key,keylen,hashv) \ +do { \ + unsigned const char *_sfh_key=(unsigned const char*)(key); \ + uint32_t _sfh_tmp, _sfh_len = (uint32_t)keylen; \ + \ + unsigned _sfh_rem = _sfh_len & 3U; \ + _sfh_len >>= 2; \ + hashv = 0xcafebabeu; \ + \ + /* Main loop */ \ + for (;_sfh_len > 0U; _sfh_len--) { \ + hashv += get16bits (_sfh_key); \ + _sfh_tmp = ((uint32_t)(get16bits (_sfh_key+2)) << 11) ^ hashv; \ + hashv = (hashv << 16) ^ _sfh_tmp; \ + _sfh_key += 2U*sizeof (uint16_t); \ + hashv += hashv >> 11; \ + } \ + \ + /* Handle end cases */ \ + switch (_sfh_rem) { \ + case 3: hashv += get16bits (_sfh_key); \ + hashv ^= hashv << 16; \ + hashv ^= (uint32_t)(_sfh_key[sizeof (uint16_t)]) << 18; \ + hashv += hashv >> 11; \ + break; \ + case 2: hashv += get16bits (_sfh_key); \ + hashv ^= hashv << 11; \ + hashv += hashv >> 17; \ + break; \ + case 1: hashv += *_sfh_key; \ + hashv ^= hashv << 10; \ + hashv += hashv >> 1; \ + } \ + \ + /* Force "avalanching" of final 127 bits */ \ + hashv ^= hashv << 3; \ + hashv += hashv >> 5; \ + hashv ^= hashv << 4; \ + hashv += hashv >> 17; \ + hashv ^= hashv << 25; \ + hashv += hashv >> 6; \ +} while (0) + +#ifdef HASH_USING_NO_STRICT_ALIASING +/* The MurmurHash exploits some CPU's (x86,x86_64) tolerance for unaligned reads. + * For other types of CPU's (e.g. Sparc) an unaligned read causes a bus error. + * MurmurHash uses the faster approach only on CPU's where we know it's safe. + * + * Note the preprocessor built-in defines can be emitted using: + * + * gcc -m64 -dM -E - < /dev/null (on gcc) + * cc -## a.c (where a.c is a simple test file) (Sun Studio) + */ +#if (defined(__i386__) || defined(__x86_64__) || defined(_M_IX86)) +#define MUR_GETBLOCK(p,i) p[i] +#else /* non intel */ +#define MUR_PLUS0_ALIGNED(p) (((unsigned long)p & 3UL) == 0UL) +#define MUR_PLUS1_ALIGNED(p) (((unsigned long)p & 3UL) == 1UL) +#define MUR_PLUS2_ALIGNED(p) (((unsigned long)p & 3UL) == 2UL) +#define MUR_PLUS3_ALIGNED(p) (((unsigned long)p & 3UL) == 3UL) +#define WP(p) ((uint32_t*)((unsigned long)(p) & ~3UL)) +#if (defined(__BIG_ENDIAN__) || defined(SPARC) || defined(__ppc__) || defined(__ppc64__)) +#define MUR_THREE_ONE(p) ((((*WP(p))&0x00ffffff) << 8) | (((*(WP(p)+1))&0xff000000) >> 24)) +#define MUR_TWO_TWO(p) ((((*WP(p))&0x0000ffff) <<16) | (((*(WP(p)+1))&0xffff0000) >> 16)) +#define MUR_ONE_THREE(p) ((((*WP(p))&0x000000ff) <<24) | (((*(WP(p)+1))&0xffffff00) >> 8)) +#else /* assume little endian non-intel */ +#define MUR_THREE_ONE(p) ((((*WP(p))&0xffffff00) >> 8) | (((*(WP(p)+1))&0x000000ff) << 24)) +#define MUR_TWO_TWO(p) ((((*WP(p))&0xffff0000) >>16) | (((*(WP(p)+1))&0x0000ffff) << 16)) +#define MUR_ONE_THREE(p) ((((*WP(p))&0xff000000) >>24) | (((*(WP(p)+1))&0x00ffffff) << 8)) +#endif +#define MUR_GETBLOCK(p,i) (MUR_PLUS0_ALIGNED(p) ? ((p)[i]) : \ + (MUR_PLUS1_ALIGNED(p) ? MUR_THREE_ONE(p) : \ + (MUR_PLUS2_ALIGNED(p) ? MUR_TWO_TWO(p) : \ + MUR_ONE_THREE(p)))) +#endif +#define MUR_ROTL32(x,r) (((x) << (r)) | ((x) >> (32 - (r)))) +#define MUR_FMIX(_h) \ +do { \ + _h ^= _h >> 16; \ + _h *= 0x85ebca6bu; \ + _h ^= _h >> 13; \ + _h *= 0xc2b2ae35u; \ + _h ^= _h >> 16; \ +} while (0) + +#define HASH_MUR(key,keylen,hashv) \ +do { \ + const uint8_t *_mur_data = (const uint8_t*)(key); \ + const int _mur_nblocks = (int)(keylen) / 4; \ + uint32_t _mur_h1 = 0xf88D5353u; \ + uint32_t _mur_c1 = 0xcc9e2d51u; \ + uint32_t _mur_c2 = 0x1b873593u; \ + uint32_t _mur_k1 = 0; \ + const uint8_t *_mur_tail; \ + const uint32_t *_mur_blocks = (const uint32_t*)(_mur_data+(_mur_nblocks*4)); \ + int _mur_i; \ + for (_mur_i = -_mur_nblocks; _mur_i != 0; _mur_i++) { \ + _mur_k1 = MUR_GETBLOCK(_mur_blocks,_mur_i); \ + _mur_k1 *= _mur_c1; \ + _mur_k1 = MUR_ROTL32(_mur_k1,15); \ + _mur_k1 *= _mur_c2; \ + \ + _mur_h1 ^= _mur_k1; \ + _mur_h1 = MUR_ROTL32(_mur_h1,13); \ + _mur_h1 = (_mur_h1*5U) + 0xe6546b64u; \ + } \ + _mur_tail = (const uint8_t*)(_mur_data + (_mur_nblocks*4)); \ + _mur_k1=0; \ + switch ((keylen) & 3U) { \ + case 0: break; \ + case 3: _mur_k1 ^= (uint32_t)_mur_tail[2] << 16; /* FALLTHROUGH */ \ + case 2: _mur_k1 ^= (uint32_t)_mur_tail[1] << 8; /* FALLTHROUGH */ \ + case 1: _mur_k1 ^= (uint32_t)_mur_tail[0]; \ + _mur_k1 *= _mur_c1; \ + _mur_k1 = MUR_ROTL32(_mur_k1,15); \ + _mur_k1 *= _mur_c2; \ + _mur_h1 ^= _mur_k1; \ + } \ + _mur_h1 ^= (uint32_t)(keylen); \ + MUR_FMIX(_mur_h1); \ + hashv = _mur_h1; \ +} while (0) +#endif /* HASH_USING_NO_STRICT_ALIASING */ + +/* iterate over items in a known bucket to find desired item */ +#define HASH_FIND_IN_BKT(tbl,hh,head,keyptr,keylen_in,hashval,out) \ +do { \ + if ((head).hh_head != NULL) { \ + DECLTYPE_ASSIGN(out, ELMT_FROM_HH(tbl, (head).hh_head)); \ + } else { \ + (out) = NULL; \ + } \ + while ((out) != NULL) { \ + if ((out)->hh.hashv == (hashval) && (out)->hh.keylen == (keylen_in)) { \ + if (HASH_KEYCMP((out)->hh.key, keyptr, keylen_in) == 0) { \ + break; \ + } \ + } \ + if ((out)->hh.hh_next != NULL) { \ + DECLTYPE_ASSIGN(out, ELMT_FROM_HH(tbl, (out)->hh.hh_next)); \ + } else { \ + (out) = NULL; \ + } \ + } \ +} while (0) + +/* add an item to a bucket */ +#define HASH_ADD_TO_BKT(head,hh,addhh,oomed) \ +do { \ + UT_hash_bucket *_ha_head = &(head); \ + _ha_head->count++; \ + (addhh)->hh_next = _ha_head->hh_head; \ + (addhh)->hh_prev = NULL; \ + if (_ha_head->hh_head != NULL) { \ + _ha_head->hh_head->hh_prev = (addhh); \ + } \ + _ha_head->hh_head = (addhh); \ + if ((_ha_head->count >= ((_ha_head->expand_mult + 1U) * HASH_BKT_CAPACITY_THRESH)) \ + && !(addhh)->tbl->noexpand) { \ + HASH_EXPAND_BUCKETS(addhh,(addhh)->tbl, oomed); \ + IF_HASH_NONFATAL_OOM( \ + if (oomed) { \ + HASH_DEL_IN_BKT(head,addhh); \ + } \ + ) \ + } \ +} while (0) + +/* remove an item from a given bucket */ +#define HASH_DEL_IN_BKT(head,delhh) \ +do { \ + UT_hash_bucket *_hd_head = &(head); \ + _hd_head->count--; \ + if (_hd_head->hh_head == (delhh)) { \ + _hd_head->hh_head = (delhh)->hh_next; \ + } \ + if ((delhh)->hh_prev) { \ + (delhh)->hh_prev->hh_next = (delhh)->hh_next; \ + } \ + if ((delhh)->hh_next) { \ + (delhh)->hh_next->hh_prev = (delhh)->hh_prev; \ + } \ +} while (0) + +/* Bucket expansion has the effect of doubling the number of buckets + * and redistributing the items into the new buckets. Ideally the + * items will distribute more or less evenly into the new buckets + * (the extent to which this is true is a measure of the quality of + * the hash function as it applies to the key domain). + * + * With the items distributed into more buckets, the chain length + * (item count) in each bucket is reduced. Thus by expanding buckets + * the hash keeps a bound on the chain length. This bounded chain + * length is the essence of how a hash provides constant time lookup. + * + * The calculation of tbl->ideal_chain_maxlen below deserves some + * explanation. First, keep in mind that we're calculating the ideal + * maximum chain length based on the *new* (doubled) bucket count. + * In fractions this is just n/b (n=number of items,b=new num buckets). + * Since the ideal chain length is an integer, we want to calculate + * ceil(n/b). We don't depend on floating point arithmetic in this + * hash, so to calculate ceil(n/b) with integers we could write + * + * ceil(n/b) = (n/b) + ((n%b)?1:0) + * + * and in fact a previous version of this hash did just that. + * But now we have improved things a bit by recognizing that b is + * always a power of two. We keep its base 2 log handy (call it lb), + * so now we can write this with a bit shift and logical AND: + * + * ceil(n/b) = (n>>lb) + ( (n & (b-1)) ? 1:0) + * + */ +#define HASH_EXPAND_BUCKETS(hh,tbl,oomed) \ +do { \ + unsigned _he_bkt; \ + unsigned _he_bkt_i; \ + struct UT_hash_handle *_he_thh, *_he_hh_nxt; \ + UT_hash_bucket *_he_new_buckets, *_he_newbkt; \ + _he_new_buckets = (UT_hash_bucket*)uthash_malloc( \ + 2UL * (tbl)->num_buckets * sizeof(struct UT_hash_bucket)); \ + if (!_he_new_buckets) { \ + HASH_RECORD_OOM(oomed); \ + } else { \ + uthash_bzero(_he_new_buckets, \ + 2UL * (tbl)->num_buckets * sizeof(struct UT_hash_bucket)); \ + (tbl)->ideal_chain_maxlen = \ + ((tbl)->num_items >> ((tbl)->log2_num_buckets+1U)) + \ + ((((tbl)->num_items & (((tbl)->num_buckets*2U)-1U)) != 0U) ? 1U : 0U); \ + (tbl)->nonideal_items = 0; \ + for (_he_bkt_i = 0; _he_bkt_i < (tbl)->num_buckets; _he_bkt_i++) { \ + _he_thh = (tbl)->buckets[ _he_bkt_i ].hh_head; \ + while (_he_thh != NULL) { \ + _he_hh_nxt = _he_thh->hh_next; \ + HASH_TO_BKT(_he_thh->hashv, (tbl)->num_buckets * 2U, _he_bkt); \ + _he_newbkt = &(_he_new_buckets[_he_bkt]); \ + if (++(_he_newbkt->count) > (tbl)->ideal_chain_maxlen) { \ + (tbl)->nonideal_items++; \ + if (_he_newbkt->count > _he_newbkt->expand_mult * (tbl)->ideal_chain_maxlen) { \ + _he_newbkt->expand_mult++; \ + } \ + } \ + _he_thh->hh_prev = NULL; \ + _he_thh->hh_next = _he_newbkt->hh_head; \ + if (_he_newbkt->hh_head != NULL) { \ + _he_newbkt->hh_head->hh_prev = _he_thh; \ + } \ + _he_newbkt->hh_head = _he_thh; \ + _he_thh = _he_hh_nxt; \ + } \ + } \ + uthash_free((tbl)->buckets, (tbl)->num_buckets * sizeof(struct UT_hash_bucket)); \ + (tbl)->num_buckets *= 2U; \ + (tbl)->log2_num_buckets++; \ + (tbl)->buckets = _he_new_buckets; \ + (tbl)->ineff_expands = ((tbl)->nonideal_items > ((tbl)->num_items >> 1)) ? \ + ((tbl)->ineff_expands+1U) : 0U; \ + if ((tbl)->ineff_expands > 1U) { \ + (tbl)->noexpand = 1; \ + uthash_noexpand_fyi(tbl); \ + } \ + uthash_expand_fyi(tbl); \ + } \ +} while (0) + + +/* This is an adaptation of Simon Tatham's O(n log(n)) mergesort */ +/* Note that HASH_SORT assumes the hash handle name to be hh. + * HASH_SRT was added to allow the hash handle name to be passed in. */ +#define HASH_SORT(head,cmpfcn) HASH_SRT(hh,head,cmpfcn) +#define HASH_SRT(hh,head,cmpfcn) \ +do { \ + unsigned _hs_i; \ + unsigned _hs_looping,_hs_nmerges,_hs_insize,_hs_psize,_hs_qsize; \ + struct UT_hash_handle *_hs_p, *_hs_q, *_hs_e, *_hs_list, *_hs_tail; \ + if (head != NULL) { \ + _hs_insize = 1; \ + _hs_looping = 1; \ + _hs_list = &((head)->hh); \ + while (_hs_looping != 0U) { \ + _hs_p = _hs_list; \ + _hs_list = NULL; \ + _hs_tail = NULL; \ + _hs_nmerges = 0; \ + while (_hs_p != NULL) { \ + _hs_nmerges++; \ + _hs_q = _hs_p; \ + _hs_psize = 0; \ + for (_hs_i = 0; _hs_i < _hs_insize; ++_hs_i) { \ + _hs_psize++; \ + _hs_q = ((_hs_q->next != NULL) ? \ + HH_FROM_ELMT((head)->hh.tbl, _hs_q->next) : NULL); \ + if (_hs_q == NULL) { \ + break; \ + } \ + } \ + _hs_qsize = _hs_insize; \ + while ((_hs_psize != 0U) || ((_hs_qsize != 0U) && (_hs_q != NULL))) { \ + if (_hs_psize == 0U) { \ + _hs_e = _hs_q; \ + _hs_q = ((_hs_q->next != NULL) ? \ + HH_FROM_ELMT((head)->hh.tbl, _hs_q->next) : NULL); \ + _hs_qsize--; \ + } else if ((_hs_qsize == 0U) || (_hs_q == NULL)) { \ + _hs_e = _hs_p; \ + if (_hs_p != NULL) { \ + _hs_p = ((_hs_p->next != NULL) ? \ + HH_FROM_ELMT((head)->hh.tbl, _hs_p->next) : NULL); \ + } \ + _hs_psize--; \ + } else if ((cmpfcn( \ + DECLTYPE(head)(ELMT_FROM_HH((head)->hh.tbl, _hs_p)), \ + DECLTYPE(head)(ELMT_FROM_HH((head)->hh.tbl, _hs_q)) \ + )) <= 0) { \ + _hs_e = _hs_p; \ + if (_hs_p != NULL) { \ + _hs_p = ((_hs_p->next != NULL) ? \ + HH_FROM_ELMT((head)->hh.tbl, _hs_p->next) : NULL); \ + } \ + _hs_psize--; \ + } else { \ + _hs_e = _hs_q; \ + _hs_q = ((_hs_q->next != NULL) ? \ + HH_FROM_ELMT((head)->hh.tbl, _hs_q->next) : NULL); \ + _hs_qsize--; \ + } \ + if ( _hs_tail != NULL ) { \ + _hs_tail->next = ((_hs_e != NULL) ? \ + ELMT_FROM_HH((head)->hh.tbl, _hs_e) : NULL); \ + } else { \ + _hs_list = _hs_e; \ + } \ + if (_hs_e != NULL) { \ + _hs_e->prev = ((_hs_tail != NULL) ? \ + ELMT_FROM_HH((head)->hh.tbl, _hs_tail) : NULL); \ + } \ + _hs_tail = _hs_e; \ + } \ + _hs_p = _hs_q; \ + } \ + if (_hs_tail != NULL) { \ + _hs_tail->next = NULL; \ + } \ + if (_hs_nmerges <= 1U) { \ + _hs_looping = 0; \ + (head)->hh.tbl->tail = _hs_tail; \ + DECLTYPE_ASSIGN(head, ELMT_FROM_HH((head)->hh.tbl, _hs_list)); \ + } \ + _hs_insize *= 2U; \ + } \ + HASH_FSCK(hh, head, "HASH_SRT"); \ + } \ +} while (0) + +/* This function selects items from one hash into another hash. + * The end result is that the selected items have dual presence + * in both hashes. There is no copy of the items made; rather + * they are added into the new hash through a secondary hash + * hash handle that must be present in the structure. */ +#define HASH_SELECT(hh_dst, dst, hh_src, src, cond) \ +do { \ + unsigned _src_bkt, _dst_bkt; \ + void *_last_elt = NULL, *_elt; \ + UT_hash_handle *_src_hh, *_dst_hh, *_last_elt_hh=NULL; \ + ptrdiff_t _dst_hho = ((char*)(&(dst)->hh_dst) - (char*)(dst)); \ + if ((src) != NULL) { \ + for (_src_bkt=0; _src_bkt < (src)->hh_src.tbl->num_buckets; _src_bkt++) { \ + for (_src_hh = (src)->hh_src.tbl->buckets[_src_bkt].hh_head; \ + _src_hh != NULL; \ + _src_hh = _src_hh->hh_next) { \ + _elt = ELMT_FROM_HH((src)->hh_src.tbl, _src_hh); \ + if (cond(_elt)) { \ + IF_HASH_NONFATAL_OOM( int _hs_oomed = 0; ) \ + _dst_hh = (UT_hash_handle*)(((char*)_elt) + _dst_hho); \ + _dst_hh->key = _src_hh->key; \ + _dst_hh->keylen = _src_hh->keylen; \ + _dst_hh->hashv = _src_hh->hashv; \ + _dst_hh->prev = _last_elt; \ + _dst_hh->next = NULL; \ + if (_last_elt_hh != NULL) { \ + _last_elt_hh->next = _elt; \ + } \ + if ((dst) == NULL) { \ + DECLTYPE_ASSIGN(dst, _elt); \ + HASH_MAKE_TABLE(hh_dst, dst, _hs_oomed); \ + IF_HASH_NONFATAL_OOM( \ + if (_hs_oomed) { \ + uthash_nonfatal_oom(_elt); \ + (dst) = NULL; \ + continue; \ + } \ + ) \ + } else { \ + _dst_hh->tbl = (dst)->hh_dst.tbl; \ + } \ + HASH_TO_BKT(_dst_hh->hashv, _dst_hh->tbl->num_buckets, _dst_bkt); \ + HASH_ADD_TO_BKT(_dst_hh->tbl->buckets[_dst_bkt], hh_dst, _dst_hh, _hs_oomed); \ + (dst)->hh_dst.tbl->num_items++; \ + IF_HASH_NONFATAL_OOM( \ + if (_hs_oomed) { \ + HASH_ROLLBACK_BKT(hh_dst, dst, _dst_hh); \ + HASH_DELETE_HH(hh_dst, dst, _dst_hh); \ + _dst_hh->tbl = NULL; \ + uthash_nonfatal_oom(_elt); \ + continue; \ + } \ + ) \ + HASH_BLOOM_ADD(_dst_hh->tbl, _dst_hh->hashv); \ + _last_elt = _elt; \ + _last_elt_hh = _dst_hh; \ + } \ + } \ + } \ + } \ + HASH_FSCK(hh_dst, dst, "HASH_SELECT"); \ +} while (0) + +#define HASH_CLEAR(hh,head) \ +do { \ + if ((head) != NULL) { \ + HASH_BLOOM_FREE((head)->hh.tbl); \ + uthash_free((head)->hh.tbl->buckets, \ + (head)->hh.tbl->num_buckets*sizeof(struct UT_hash_bucket)); \ + uthash_free((head)->hh.tbl, sizeof(UT_hash_table)); \ + (head) = NULL; \ + } \ +} while (0) + +#define HASH_OVERHEAD(hh,head) \ + (((head) != NULL) ? ( \ + (size_t)(((head)->hh.tbl->num_items * sizeof(UT_hash_handle)) + \ + ((head)->hh.tbl->num_buckets * sizeof(UT_hash_bucket)) + \ + sizeof(UT_hash_table) + \ + (HASH_BLOOM_BYTELEN))) : 0U) + +#ifdef NO_DECLTYPE +#define HASH_ITER(hh,head,el,tmp) \ +for(((el)=(head)), ((*(char**)(&(tmp)))=(char*)((head!=NULL)?(head)->hh.next:NULL)); \ + (el) != NULL; ((el)=(tmp)), ((*(char**)(&(tmp)))=(char*)((tmp!=NULL)?(tmp)->hh.next:NULL))) +#else +#define HASH_ITER(hh,head,el,tmp) \ +for(((el)=(head)), ((tmp)=DECLTYPE(el)((head!=NULL)?(head)->hh.next:NULL)); \ + (el) != NULL; ((el)=(tmp)), ((tmp)=DECLTYPE(el)((tmp!=NULL)?(tmp)->hh.next:NULL))) +#endif + +/* obtain a count of items in the hash */ +#define HASH_COUNT(head) HASH_CNT(hh,head) +#define HASH_CNT(hh,head) ((head != NULL)?((head)->hh.tbl->num_items):0U) + +typedef struct UT_hash_bucket { + struct UT_hash_handle *hh_head; + unsigned count; + + /* expand_mult is normally set to 0. In this situation, the max chain length + * threshold is enforced at its default value, HASH_BKT_CAPACITY_THRESH. (If + * the bucket's chain exceeds this length, bucket expansion is triggered). + * However, setting expand_mult to a non-zero value delays bucket expansion + * (that would be triggered by additions to this particular bucket) + * until its chain length reaches a *multiple* of HASH_BKT_CAPACITY_THRESH. + * (The multiplier is simply expand_mult+1). The whole idea of this + * multiplier is to reduce bucket expansions, since they are expensive, in + * situations where we know that a particular bucket tends to be overused. + * It is better to let its chain length grow to a longer yet-still-bounded + * value, than to do an O(n) bucket expansion too often. + */ + unsigned expand_mult; + +} UT_hash_bucket; + +/* random signature used only to find hash tables in external analysis */ +#define HASH_SIGNATURE 0xa0111fe1u +#define HASH_BLOOM_SIGNATURE 0xb12220f2u + +typedef struct UT_hash_table { + UT_hash_bucket *buckets; + unsigned num_buckets, log2_num_buckets; + unsigned num_items; + struct UT_hash_handle *tail; /* tail hh in app order, for fast append */ + ptrdiff_t hho; /* hash handle offset (byte pos of hash handle in element */ + + /* in an ideal situation (all buckets used equally), no bucket would have + * more than ceil(#items/#buckets) items. that's the ideal chain length. */ + unsigned ideal_chain_maxlen; + + /* nonideal_items is the number of items in the hash whose chain position + * exceeds the ideal chain maxlen. these items pay the penalty for an uneven + * hash distribution; reaching them in a chain traversal takes >ideal steps */ + unsigned nonideal_items; + + /* ineffective expands occur when a bucket doubling was performed, but + * afterward, more than half the items in the hash had nonideal chain + * positions. If this happens on two consecutive expansions we inhibit any + * further expansion, as it's not helping; this happens when the hash + * function isn't a good fit for the key domain. When expansion is inhibited + * the hash will still work, albeit no longer in constant time. */ + unsigned ineff_expands, noexpand; + + uint32_t signature; /* used only to find hash tables in external analysis */ +#ifdef HASH_BLOOM + uint32_t bloom_sig; /* used only to test bloom exists in external analysis */ + uint8_t *bloom_bv; + uint8_t bloom_nbits; +#endif + +} UT_hash_table; + +typedef struct UT_hash_handle { + struct UT_hash_table *tbl; + void *prev; /* prev element in app order */ + void *next; /* next element in app order */ + struct UT_hash_handle *hh_prev; /* previous hh in bucket order */ + struct UT_hash_handle *hh_next; /* next hh in bucket order */ + void *key; /* ptr to enclosing struct's key */ + unsigned keylen; /* enclosing struct's key len */ + unsigned hashv; /* result of hash-fcn(key) */ +} UT_hash_handle; + +#endif /* UTHASH_H */ diff --git a/src/lib/zck.c b/src/lib/zck.c new file mode 100644 index 0000000..f4ce884 --- /dev/null +++ b/src/lib/zck.c @@ -0,0 +1,417 @@ +/* + * Copyright 2018 Jonathan Dieter + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions are met: + * + * 1. Redistributions of source code must retain the above copyright notice, + * this list of conditions and the following disclaimer. + * + * 2. Redistributions in binary form must reproduce the above copyright notice, + * this list of conditions and the following disclaimer in the documentation + * and/or other materials provided with the distribution. + * + * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" + * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE + * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE + * ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE + * LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR + * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF + * SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS + * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN + * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) + * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE + * POSSIBILITY OF SUCH DAMAGE. + */ + +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include + +#include "zck_private.h" + + + +/* If lead format changes, this needs to be changed */ +int PUBLIC zck_get_min_download_size() { + /* Magic + hash type + hash digest + header size */ + return 5 + MAX_COMP_SIZE*2 + get_max_hash_size(); +} + + + +static void zck_clear(zckCtx *zck) { + if(zck == NULL) + return; + index_free(zck); + if(zck->header) + free(zck->header); + zck->header = NULL; + zck->header_size = 0; + if(!comp_close(zck)) + zck_log(ZCK_LOG_WARNING, "Unable to close compression"); + hash_close(&(zck->full_hash)); + hash_close(&(zck->check_full_hash)); + hash_close(&(zck->check_chunk_hash)); + clear_work_index(zck); + if(zck->full_hash_digest) { + free(zck->full_hash_digest); + zck->full_hash_digest = NULL; + } + if(zck->header_digest) { + free(zck->header_digest); + zck->header_digest = NULL; + } + if(zck->temp_fd) { + close(zck->temp_fd); + zck->temp_fd = 0; + } + if(zck->msg) { + free(zck->msg); + zck->msg = NULL; + } + zck->error_state = 0; + zck->fd = -1; +} + +static int hex_to_int (char c) { + if (c >= 97) + c = c - 32; + int result = (c / 16 - 3) * 10 + (c % 16); + if (result > 9) + result--; + if (result < 0 || result > 15) + return -1; + return result; +} + +static char *ascii_checksum_to_bin (zckCtx *zck, char *checksum, + int checksum_length) { + char *raw_checksum = zmalloc(checksum_length/2); + char *rp = raw_checksum; + int buf = 0; + for (int i=0; i 1024) { + set_error(zck, "TMPDIR environmental variable is > 1024 bytes"); + return -1; + } + + fname = zmalloc(strlen(template) + strlen(tmpdir) + 2); + int i=0; + for(i=0; iindex.first->length; + + /* No dict */ + if(size == 0) + return true; + + zck_log(ZCK_LOG_DEBUG, "Reading compression dict"); + char *data = zmalloc(size); + if(comp_read(zck, data, size, 0) != size) { + set_error(zck, "Error reading compressed dict"); + return false; + } + zck_log(ZCK_LOG_DEBUG, "Resetting compression"); + if(!comp_reset(zck)) + return false; + zck_log(ZCK_LOG_DEBUG, "Setting dict"); + if(!comp_soption(zck, ZCK_COMP_DICT, data, size)) + return false; + if(!comp_init(zck)) + return false; + + return true; +} + +bool PUBLIC zck_set_soption(zckCtx *zck, zck_soption option, const char *value, + size_t length) { + VALIDATE_BOOL(zck); + char *data = zmalloc(length); + memcpy(data, value, length); + + /* Validation options */ + if(option == ZCK_VAL_HEADER_DIGEST) { + VALIDATE_READ_BOOL(zck); + zckHashType chk_type = {0}; + if(zck->prep_hash_type < 0) { + free(data); + set_error(zck, "For validation, you must set the header hash type " + "*before* the header digest itself"); + return false; + } + if(!hash_setup(zck, &chk_type, zck->prep_hash_type)) { + free(data); + return false; + } + if(chk_type.digest_size*2 != length) { + free(data); + set_fatal_error(zck, "Hash digest size mismatch for header " + "validation\n" + "Expected: %i\nProvided: %lu", + chk_type.digest_size*2, length); + return false; + } + zck_log(ZCK_LOG_DEBUG, "Setting expected hash to (%s)%s", + zck_hash_name_from_type(zck->prep_hash_type), data); + zck->prep_digest = ascii_checksum_to_bin(zck, data, length); + free(data); + if(zck->prep_digest == NULL) { + set_fatal_error(zck, "Non-hex character found in supplied digest"); + return false; + } + + /* Compression options */ + } else if(option < 2000) { + VALIDATE_WRITE_BOOL(zck); + return comp_soption(zck, option, data, length); + + /* Unknown options */ + } else { + free(data); + set_error(zck, "Unknown string option %i", option); + return false; + } + return true; +} + +bool PUBLIC zck_set_ioption(zckCtx *zck, zck_ioption option, ssize_t value) { + VALIDATE_BOOL(zck); + + /* Set hash type */ + if(option == ZCK_HASH_FULL_TYPE) { + VALIDATE_WRITE_BOOL(zck); + return set_full_hash_type(zck, value); + } else if(option == ZCK_HASH_CHUNK_TYPE) { + VALIDATE_WRITE_BOOL(zck); + return set_chunk_hash_type(zck, value); + + /* Validation options */ + } else if(option == ZCK_VAL_HEADER_HASH_TYPE) { + VALIDATE_READ_BOOL(zck); + if(value < 0) { + set_error(zck, "Header hash type can't be less than zero: %li", + value); + return false; + } + /* Make sure that header hash type is set before the header digest, + * otherwise we run the risk of a buffer overflow */ + if(zck->prep_digest != NULL) { + set_error(zck, "For validation, you must set the header hash type " + "*before* the header digest itself"); + return false; + } + zck->prep_hash_type = value; + } else if(option == ZCK_VAL_HEADER_LENGTH) { + VALIDATE_READ_BOOL(zck); + if(value < 0) { + set_error(zck, + "Header size validation can't be less than zero: %li", + value); + return false; + } + zck->prep_hdr_size = value; + + /* Hash options */ + } else if(option < 100) { + /* Currently no hash options other than setting hash type, so bail */ + set_error(zck, "Unknown option %lu", value); + return false; + + /* Compression options */ + } else if(option < 2000) { + VALIDATE_WRITE_BOOL(zck); + return comp_ioption(zck, option, value); + + /* Unknown options */ + } else { + set_error(zck, "Unknown integer option %i", option); + return false; + } + return true; +} + +bool PUBLIC zck_close(zckCtx *zck) { + VALIDATE_BOOL(zck); + + if(zck->mode == ZCK_MODE_WRITE) { + if(zck_end_chunk(zck) < 0) + return false; + if(!header_create(zck)) + return false; + if(!write_header(zck)) + return false; + zck_log(ZCK_LOG_DEBUG, "Writing chunks"); + if(!chunks_from_temp(zck)) + return false; + zck_log(ZCK_LOG_DEBUG, "Finished writing file, cleaning up"); + if(!comp_close(zck)) + return false; + if(zck->temp_fd) { + close(zck->temp_fd); + zck->temp_fd = 0; + } + } else { + if(validate_file(zck, ZCK_LOG_WARNING) < 1) + return false; + } + + return true; +} + +void PUBLIC zck_free(zckCtx **zck) { + if(zck == NULL || *zck == NULL) + return; + zck_clear(*zck); + free(*zck); + *zck = NULL; +} + +zckCtx PUBLIC *zck_create() { + zckCtx *zck = zmalloc(sizeof(zckCtx)); + zck_clear_error(NULL); + zck->prep_hash_type = -1; + zck->prep_hdr_size = -1; + return zck; +} + +bool PUBLIC zck_init_adv_read (zckCtx *zck, int src_fd) { + VALIDATE_BOOL(zck); + + zck->mode = ZCK_MODE_READ; + zck->fd = src_fd; + return true; +} + +bool PUBLIC zck_init_read (zckCtx *zck, int src_fd) { + VALIDATE_BOOL(zck); + + if(!zck_init_adv_read(zck, src_fd)) { + set_fatal_error(zck, "Unable to read file"); + return false; + } + + if(!zck_read_lead(zck)) { + set_fatal_error(zck, "Unable to read lead"); + return false; + } + + if(!zck_read_header(zck)) { + set_fatal_error(zck, "Unable to read header"); + return false; + } + + return true; +} + +bool PUBLIC zck_init_write (zckCtx *zck, int dst_fd) { + VALIDATE_BOOL(zck); + + zck->mode = ZCK_MODE_WRITE; + zck->temp_fd = get_tmp_fd(zck); + if(zck->temp_fd < 0) + return false; + + /* Set defaults */ +#ifdef ZCHUNK_ZSTD + if(!zck_set_ioption(zck, ZCK_COMP_TYPE, ZCK_COMP_ZSTD)) + return false; +#else + if(!zck_set_ioption(zck, ZCK_COMP_TYPE, ZCK_COMP_NONE)) + return false; +#endif + if(!zck_set_ioption(zck, ZCK_HASH_FULL_TYPE, ZCK_HASH_SHA256)) + return false; + if(!zck_set_ioption(zck, ZCK_HASH_CHUNK_TYPE, ZCK_HASH_SHA512_128)) + return false; + zck->fd = dst_fd; + + return true; +} + +int PUBLIC zck_get_fd(zckCtx *zck) { + VALIDATE_BOOL(zck); + return zck->fd; +} + +bool PUBLIC zck_set_fd(zckCtx *zck, int fd) { + VALIDATE_BOOL(zck); + zck->fd = fd; + return true; +} diff --git a/src/lib/zck_private.h b/src/lib/zck_private.h new file mode 100644 index 0000000..a21e963 --- /dev/null +++ b/src/lib/zck_private.h @@ -0,0 +1,427 @@ +#ifndef ZCK_PRIVATE_H +#define ZCK_PRIVATE_H + +#include +#include +#include +#include +#include +#include "buzhash/buzhash.h" +#include "uthash.h" +#include "zck.h" + +#define BUF_SIZE 32768 +/* Maximum string length for a compressed size_t */ +#define MAX_COMP_SIZE (((sizeof(size_t) * 8) / 7) + 1) + +#define ZCK_MODE_READ 0 +#define ZCK_MODE_WRITE 1 + +#define DEFAULT_BUZHASH_WIDTH 48 +#define DEFAULT_BUZHASH_BITS 15 +#define CHUNK_DEFAULT_MIN 1 +#define CHUNK_DEFAULT_MAX 10485760 // 10MB + +#define PUBLIC __attribute__((visibility("default"))) + +#define zck_log(...) zck_log_wf(__func__, __VA_ARGS__) + +#define set_error(zck, ...) set_error_wf(zck, 0, __func__, __VA_ARGS__) +#define set_fatal_error(zck, ...) set_error_wf(zck, 1, __func__, __VA_ARGS__) + +#define ALLOCD_BOOL(z, f) if(!f) { \ + set_error(z, \ + "Object not initialized"); \ + return false; \ + } +#define ALLOCD_INT(z, f) if(!f) { \ + set_error(z, \ + "Object not initialized"); \ + return -1; \ + } +#define ALLOCD_PTR(z, f) if(!f) { \ + set_error(z, \ + "Object not initialized"); \ + return NULL; \ + } +#define VALIDATE_BOOL(f) ALLOCD_BOOL(f, f) \ + if((f)->error_state > 0) return false; +#define VALIDATE_INT(f) ALLOCD_INT(f, f) \ + if((f)->error_state > 0) return -1; +#define VALIDATE_PTR(f) ALLOCD_PTR(f, f) \ + if((f)->error_state > 0) return NULL; + +#define VALIDATE_READ_BOOL(f) VALIDATE_BOOL(f); \ + if(f->mode != ZCK_MODE_READ) { \ + set_error(f, \ + "zckCtx not opened for reading"); \ + return false; \ + } +#define VALIDATE_READ_INT(f) VALIDATE_INT(f); \ + if(f->mode != ZCK_MODE_READ) { \ + set_error(f, \ + "zckCtx not opened for reading"); \ + return -1; \ + } +#define VALIDATE_READ_PTR(f) VALIDATE_PTR(f); \ + if(f->mode != ZCK_MODE_READ) { \ + set_error(f, \ + "zckCtx not opened for reading"); \ + return NULL; \ + } + +#define VALIDATE_WRITE_BOOL(f) VALIDATE_BOOL(f); \ + if(f->mode != ZCK_MODE_WRITE) { \ + set_error(f, \ + "zckCtx not opened for writing"); \ + return false; \ + } +#define VALIDATE_WRITE_INT(f) VALIDATE_INT(f); \ + if(f->mode != ZCK_MODE_WRITE) { \ + set_error(f, \ + "zckCtx not opened for writing"); \ + return -1; \ + } +#define VALIDATE_WRITE_PTR(f) VALIDATE_PTR(f); \ + if(f->mode != ZCK_MODE_WRITE) { \ + set_error(f, \ + "zckCtx not opened for writing"); \ + return NULL; \ + } + +typedef struct zckComp zckComp; + +typedef bool (*finit)(zckCtx *zck, zckComp *comp); +typedef bool (*fparam)(zckCtx *zck,zckComp *comp, int option, const void *value); +typedef bool (*fccompend)(zckCtx *zck, zckComp *comp, char **dst, + size_t *dst_size, bool use_dict); +typedef ssize_t (*fcomp)(zckCtx *zck, zckComp *comp, const char *src, + const size_t src_size, char **dst, size_t *dst_size, + bool use_dict); +typedef bool (*fdecomp)(zckCtx *zck, zckComp *comp, const bool use_dict); +typedef bool (*fdcompend)(zckCtx *zck, zckComp *comp, const bool use_dict, + const size_t fd_size); +typedef bool (*fcclose)(zckCtx *zck, zckComp *comp); + +typedef struct zckHashType { + int type; + int digest_size; +} zckHashType; + +struct zckHash { + zckHashType *type; + void *ctx; +}; + +typedef void CURL; + +typedef struct zckMP { + int state; + size_t length; + char *buffer; + size_t buffer_len; +} zckMP; + +struct zckDL { + struct zckCtx *zck; + size_t dl; + size_t ul; + zckRange *range; + zckMP *mp; + char *boundary; + int parser_started; + int is_chunk; + size_t write_in_chunk; + size_t dl_chunk_data; + regex_t *dl_regex; + regex_t *end_regex; + regex_t *hdr_regex; + zckChunk *tgt_check; + int tgt_number; + + /* Callbacks */ + zck_wcb write_cb; + void *write_data; + zck_wcb header_cb; + void *header_data; +}; + +/* Contains an index item pointing to a chunk */ +struct zckChunk { + char *digest; + int digest_size; + int valid; + size_t number; + size_t start; + size_t comp_length; + size_t length; + struct zckChunk *next; + struct zckChunk *src; + zckCtx *zck; + UT_hash_handle hh; +}; + +/* Contains everything about an index and a pointer to the first index item */ +struct zckIndex { + size_t count; + size_t length; + int hash_type; + size_t digest_size; + zckChunk *first; + zckChunk *last; + zckChunk *current; + zckChunk *ht; +}; + +/* Contains a single range */ +typedef struct zckRangeItem { + size_t start; + size_t end; + struct zckRangeItem *next; + struct zckRangeItem *prev; +} zckRangeItem; + +/* Contains a series of ranges, information about them, a link to the first + * range item, and an index describing what information is in the ranges */ +struct zckRange { + unsigned int count; + zckRangeItem *first; + zckIndex index; +}; + +struct zckComp { + int started; + + uint8_t type; + int level; + + void *cctx; + void *dctx; + void *cdict_ctx; + void *ddict_ctx; + void *dict; + size_t dict_size; + + char *data; + size_t data_size; + size_t data_loc; + zckChunk *data_idx; + int data_eof; + char *dc_data; + size_t dc_data_size; + size_t dc_data_loc; + + finit init; + fparam set_parameter; + fcomp compress; + fccompend end_cchunk; + fdecomp decompress; + fdcompend end_dchunk; + fcclose close; +}; + +typedef struct zckSig { + zckHashType hash_type; + size_t length; + char *signature; + void *ctx; +} zckSig; + +typedef struct zckSigCollection { + int count; + zckSig *sig; +} zckSigCollection; + +struct zckCtx { + int temp_fd; + int fd; + int mode; + + char *full_hash_digest; + char *header_digest; + size_t data_offset; + size_t header_length; + + char *header; + size_t header_size; + size_t hdr_digest_loc; + char *lead_string; + size_t lead_size; + char *preface_string; + size_t preface_size; + char *index_string; + size_t index_size; + char *sig_string; + size_t sig_size; + + + char *prep_digest; + int prep_hash_type; + ssize_t prep_hdr_size; + + zckIndex index; + zckChunk *work_index_item; + zckHash work_index_hash; + size_t stream; + int has_streams; + int has_optional_elems; + + char *read_buf; + size_t read_buf_size; + + zckHash full_hash; + zckHash check_full_hash; + zckHash check_chunk_hash; + zckComp comp; + zckHashType hash_type; + zckHashType chunk_hash_type; + zckSigCollection sigs; + + char *data; + size_t data_size; + + buzHash buzhash; + int buzhash_width; + int buzhash_match_bits; + int buzhash_bitmask; + int chunk_auto_min; + int chunk_auto_max; + int chunk_min_size; + int chunk_max_size; + int manual_chunk; + + char *msg; + int error_state; +}; + +int get_tmp_fd() + __attribute__ ((warn_unused_result)); +bool import_dict(zckCtx *zck) + __attribute__ ((warn_unused_result)); +void *zmalloc(size_t size) + __attribute__ ((warn_unused_result)); +void *zrealloc(void *ptr, size_t size) + __attribute__ ((warn_unused_result)); + + +/* hash/hash.h */ +bool hash_setup(zckCtx *zck, zckHashType *ht, int h) + __attribute__ ((warn_unused_result)); +bool hash_init(zckCtx *zck, zckHash *hash, zckHashType *hash_type) + __attribute__ ((warn_unused_result)); +bool hash_update(zckCtx *zck, zckHash *hash, const char *message, + const size_t size) + __attribute__ ((warn_unused_result)); +char *hash_finalize(zckCtx *zck, zckHash *hash) + __attribute__ ((warn_unused_result)); +void hash_close(zckHash *hash); +void hash_reset(zckHashType *ht); +int validate_chunk(zckChunk *idx, zck_log_type bad_checksum) + __attribute__ ((warn_unused_result)); +int validate_file(zckCtx *zck, zck_log_type bad_checksums) + __attribute__ ((warn_unused_result)); +int validate_current_chunk(zckCtx *zck) + __attribute__ ((warn_unused_result)); +int validate_header(zckCtx *zck) + __attribute__ ((warn_unused_result)); +bool set_full_hash_type(zckCtx *zck, int hash_type) + __attribute__ ((warn_unused_result)); +bool set_chunk_hash_type(zckCtx *zck, int hash_type) + __attribute__ ((warn_unused_result)); +int get_max_hash_size() + __attribute__ ((warn_unused_result)); +char *get_digest_string(const char *digest, int size) + __attribute__ ((warn_unused_result)); + + +/* index/index.c */ +bool index_read(zckCtx *zck, char *data, size_t size, size_t max_length) + __attribute__ ((warn_unused_result)); +bool index_create(zckCtx *zck) + __attribute__ ((warn_unused_result)); +bool index_new_chunk(zckCtx *zck, zckIndex *index, char *digest, int digest_size, + size_t comp_size, size_t orig_size, zckChunk *src, bool valid) + __attribute__ ((warn_unused_result)); +bool index_add_to_chunk(zckCtx *zck, char *data, size_t comp_size, + size_t orig_size) + __attribute__ ((warn_unused_result)); +bool index_finish_chunk(zckCtx *zck) + __attribute__ ((warn_unused_result)); +void index_clean(zckIndex *index); +void index_free(zckCtx *zck); +void clear_work_index(zckCtx *zck); +bool write_index(zckCtx *zck) + __attribute__ ((warn_unused_result)); + + +/* io.c */ +int seek_data(zckCtx *zck, off_t offset, int whence) + __attribute__ ((warn_unused_result)); +ssize_t tell_data(zckCtx *zck) + __attribute__ ((warn_unused_result)); +ssize_t read_data(zckCtx *zck, char *data, size_t length) + __attribute__ ((warn_unused_result)); +int write_data(zckCtx *zck, int fd, const char *data, size_t length) + __attribute__ ((warn_unused_result)); +int chunks_from_temp(zckCtx *zck) + __attribute__ ((warn_unused_result)); + +/* header.c */ +bool header_create(zckCtx *zck) + __attribute__ ((warn_unused_result)); +bool write_header(zckCtx *zck) + __attribute__ ((warn_unused_result)); + +/* comp/comp.c */ +bool comp_init(zckCtx *zck) + __attribute__ ((warn_unused_result)); +bool comp_close(zckCtx *zck) + __attribute__ ((warn_unused_result)); +bool comp_reset(zckCtx *zck) + __attribute__ ((warn_unused_result)); +bool comp_add_to_dc(zckCtx *zck, zckComp *comp, const char *src, size_t src_size) + __attribute__ ((warn_unused_result)); +ssize_t comp_read(zckCtx *zck, char *dst, size_t dst_size, bool use_dict) + __attribute__ ((warn_unused_result)); +bool comp_ioption(zckCtx *zck, zck_ioption option, ssize_t value) + __attribute__ ((warn_unused_result)); +bool comp_soption(zckCtx *zck, zck_soption option, const void *value, + size_t length) + __attribute__ ((warn_unused_result)); + +/* dl/range.c */ +char *range_get_char(zckRangeItem **range, int max_ranges) + __attribute__ ((warn_unused_result)); + +/* dl/multipart.c */ +size_t multipart_extract(zckDL *dl, char *b, size_t l) + __attribute__ ((warn_unused_result)); +size_t multipart_get_boundary(zckDL *dl, char *b, size_t size) + __attribute__ ((warn_unused_result)); +void reset_mp(zckMP *mp); + +/* dl/dl.c */ +int dl_write_range(zckDL *dl, const char *at, size_t length) + __attribute__ ((warn_unused_result)); + +/* compint.c */ +int compint_from_int(zckCtx *zck, char *compint, int val, size_t *length) + __attribute__ ((warn_unused_result)); +void compint_from_size(char *compint, size_t val, size_t *length); +int compint_to_int(zckCtx *zck, int *val, const char *compint, size_t *length, + size_t max_length) + __attribute__ ((warn_unused_result)); +int compint_to_size(zckCtx *zck, size_t *val, const char *compint, + size_t *length, size_t max_length) + __attribute__ ((warn_unused_result)); + +/* log.c */ +void zck_log_v(const char *function, zck_log_type lt, const char *format, + va_list args); +void zck_log_wf(const char *function, zck_log_type lt, const char *format, ...); + +/* error.c */ +void set_error_wf(zckCtx *zck, int fatal, const char *function, + const char *format, ...); + +#endif diff --git a/src/memmem.c b/src/memmem.c new file mode 100644 index 0000000..e72501b --- /dev/null +++ b/src/memmem.c @@ -0,0 +1,64 @@ +/* + * Copyright (C) 2008 The Android Open Source Project + * All rights reserved. + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions + * are met: + * * Redistributions of source code must retain the above copyright + * notice, this list of conditions and the following disclaimer. + * * Redistributions in binary form must reproduce the above copyright + * notice, this list of conditions and the following disclaimer in + * the documentation and/or other materials provided with the + * distribution. + * + * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS + * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT + * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS + * FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE + * COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, + * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, + * BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS + * OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED + * AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, + * OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT + * OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF + * SUCH DAMAGE. + */ +/* + * This uses the "Not So Naive" algorithm, a very simple but + * usually effective algorithm, see: + * http://www-igm.univ-mlv.fr/~lecroq/string/ + */ +#include + +void *memmem(const void *haystack, size_t n, const void *needle, size_t m) +{ + if (m > n || !m || !n) + return NULL; + + if (__builtin_expect((m > 1), 1)) { + const unsigned char* y = (const unsigned char*) haystack; + const unsigned char* x = (const unsigned char*) needle; + size_t j = 0; + size_t k = 1, l = 2; + + if (x[0] == x[1]) { + k = 2; + l = 1; + } + while (j <= n-m) { + if (x[1] != y[j+1]) { + j += k; + } else { + if (!memcmp(x+2, y+j+2, m-2) && x[0] == y[j]) + return (void*) &y[j]; + j += l; + } + } + } else { + /* degenerate case */ + return memchr(haystack, ((unsigned char*)needle)[0], n); + } + return NULL; +} diff --git a/src/memmem.h b/src/memmem.h new file mode 100644 index 0000000..2eb0206 --- /dev/null +++ b/src/memmem.h @@ -0,0 +1,4 @@ +#ifndef MEMMEM_H +#define MEMMEM_H +void *memmem(const void *haystack, size_t n, const void *needle, size_t m); +#endif diff --git a/src/meson.build b/src/meson.build new file mode 100644 index 0000000..d5ad75a --- /dev/null +++ b/src/meson.build @@ -0,0 +1,50 @@ +subdir('lib') +zck = executable( + 'zck', + ['zck.c', 'util_common.c'], + include_directories: inc, + dependencies: argplib, + link_with: zcklib, + install: true +) +unzck = executable( + 'unzck', + ['unzck.c', 'util_common.c'], + include_directories: inc, + dependencies: argplib, + link_with: zcklib, + install: true +) +zckdl = executable( + 'zckdl', + ['zck_dl.c', 'util_common.c'], + include_directories: inc, + dependencies: [argplib, curl_dep], + link_with: zcklib, + install: true +) +zck_gen_zdict = executable( + 'zck_gen_zdict', + ['zck_gen_zdict.c', 'util_common.c'], + include_directories: inc, + dependencies: argplib, + link_with: zcklib, + install: true +) +zck_read_header = executable( + 'zck_read_header', + ['zck_read_header.c', 'util_common.c'], + include_directories: inc, + dependencies: argplib, + link_with: zcklib, + install: true +) +zck_delta_size = executable( + 'zck_delta_size', + ['zck_delta_size.c', 'util_common.c', 'memmem.c'], + include_directories: inc, + dependencies: argplib, + link_with: zcklib, + install: true +) + diff --git a/src/unzck.c b/src/unzck.c new file mode 100644 index 0000000..7cfe9e1 --- /dev/null +++ b/src/unzck.c @@ -0,0 +1,247 @@ +/* + * Copyright 2018, 2020 Jonathan Dieter + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions are met: + * + * 1. Redistributions of source code must retain the above copyright notice, + * this list of conditions and the following disclaimer. + * + * 2. Redistributions in binary form must reproduce the above copyright notice, + * this list of conditions and the following disclaimer in the documentation + * and/or other materials provided with the distribution. + * + * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" + * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE + * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE + * ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE + * LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR + * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF + * SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS + * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN + * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) + * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE + * POSSIBILITY OF SUCH DAMAGE. + */ + +#define _GNU_SOURCE + +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include + +#include "util_common.h" + +static char doc[] = "unzck - Decompress a zchunk file"; + +static char args_doc[] = ""; + +static struct argp_option options[] = { + {"verbose", 'v', 0, 0, + "Increase verbosity (can be specified more than once for debugging)"}, + {"stdout", 'c', 0, 0, "Direct output to stdout"}, + {"dict", 1000, 0, 0, "Only extract the dictionary"}, + {"version", 'V', 0, 0, "Show program version"}, + { 0 } +}; + +struct arguments { + char *args[1]; + zck_log_type log_level; + bool dict; + bool std_out; + bool exit; +}; + +static error_t parse_opt (int key, char *arg, struct argp_state *state) { + struct arguments *arguments = state->input; + + if(arguments->exit) + return 0; + + switch (key) { + case 'v': + arguments->log_level--; + if(arguments->log_level < ZCK_LOG_DDEBUG) + arguments->log_level = ZCK_LOG_DDEBUG; + break; + case 'c': + arguments->std_out = true; + break; + case 'V': + version(); + arguments->exit = true; + break; + case 1000: + arguments->dict = true; + break; + case ARGP_KEY_ARG: + if (state->arg_num >= 1) { + argp_usage (state); + return EINVAL; + } + arguments->args[state->arg_num] = arg; + + break; + + case ARGP_KEY_END: + if (state->arg_num < 1) { + argp_usage (state); + return EINVAL; + } + break; + + default: + return ARGP_ERR_UNKNOWN; + } + return 0; +} + +static struct argp argp = {options, parse_opt, args_doc, doc}; + +int main (int argc, char *argv[]) { + struct arguments arguments = {0}; + + /* Defaults */ + arguments.log_level = ZCK_LOG_ERROR; + + int retval = argp_parse (&argp, argc, argv, 0, 0, &arguments); + if(retval || arguments.exit) + exit(retval); + + zck_set_log_level(arguments.log_level); + + if(!arguments.std_out) { + if(strlen(arguments.args[0]) < 5 || + strcmp(arguments.args[0] + strlen(arguments.args[0]) - 4, ".zck") != 0) { + dprintf(STDERR_FILENO, "Not a *.zck file: %s\n", arguments.args[0]); + exit(1); + } + } + int src_fd = open(arguments.args[0], O_RDONLY); + if(src_fd < 0) { + dprintf(STDERR_FILENO, "Unable to open %s\n", arguments.args[0]); + perror(""); + exit(1); + } + char *base_name = basename(arguments.args[0]); + char *out_name = NULL; + if(arguments.dict) + out_name = calloc(strlen(base_name) + 3, 1); // len .zck -> .zdict = +2 + else + out_name = calloc(strlen(base_name) - 2, 1); + assert(out_name); + snprintf(out_name, strlen(base_name) - 3, "%s", base_name); //Strip off .zck + if(arguments.dict) + snprintf(out_name + strlen(base_name) - 4, 7, ".zdict"); + + int dst_fd = STDOUT_FILENO; + if(!arguments.std_out) { + dst_fd = open(out_name, O_TRUNC | O_WRONLY | O_CREAT, 0666); + if(dst_fd < 0) { + dprintf(STDERR_FILENO, "Unable to open %s", out_name); + perror(""); + free(out_name); + exit(1); + } + } + + bool good_exit = false; + + char *data = NULL; + zckCtx *zck = zck_create(); + if(!zck_init_read(zck, src_fd)) { + dprintf(STDERR_FILENO, "%s", zck_get_error(zck)); + goto error2; + } + + /* Only write dictionary */ + if(arguments.dict) { + zckChunk *dict = zck_get_first_chunk(zck); + ssize_t dict_size = zck_get_chunk_size(dict); + if(dict_size < 0) { + dprintf(STDERR_FILENO, "%s", zck_get_error(zck)); + goto error2; + } + data = calloc(dict_size, 1); + assert(data); + ssize_t read_size = zck_get_chunk_data(dict, data, dict_size); + if(read_size != dict_size) { + if(read_size < 0) + dprintf(STDERR_FILENO, "%s", zck_get_error(zck)); + else + dprintf(STDERR_FILENO, + "Dict size doesn't match expected size: %li != %li\n", + read_size, dict_size); + goto error2; + } + if(write(dst_fd, data, dict_size) != dict_size) { + dprintf(STDERR_FILENO, "Error writing to %s\n", out_name); + goto error2; + } + if(dict_size > 0) { + int ret = zck_get_chunk_valid(dict); + if(ret < 1) { + if(ret == -1) + dprintf(STDERR_FILENO, "Data checksum failed verification\n"); + else + dprintf(STDERR_FILENO, "%s", zck_get_error(zck)); + goto error2; + } + } + good_exit = true; + goto error2; + } + int ret = zck_validate_data_checksum(zck); + if(ret < 1) { + if(ret == -1) + dprintf(STDERR_FILENO, "Data checksum failed verification\n"); + goto error2; + } + + data = calloc(BUF_SIZE, 1); + assert(data); + size_t total = 0; + while(true) { + ssize_t read = zck_read(zck, data, BUF_SIZE); + if(read < 0) { + dprintf(STDERR_FILENO, "%s", zck_get_error(zck)); + goto error2; + } + if(read == 0) + break; + if(write(dst_fd, data, read) != read) { + dprintf(STDERR_FILENO, "Error writing to %s\n", out_name); + goto error2; + } + total += read; + } + if(!zck_close(zck)) { + dprintf(STDERR_FILENO, "%s", zck_get_error(zck)); + goto error2; + } + if(arguments.log_level <= ZCK_LOG_INFO) + dprintf(STDERR_FILENO, "Decompressed %lu bytes\n", (unsigned long)total); + good_exit = true; +error2: + free(data); + zck_free(&zck); + if(!good_exit) + unlink(out_name); + free(out_name); + close(src_fd); + close(dst_fd); + if(!good_exit) + exit(1); + exit(0); +} diff --git a/src/util_common.c b/src/util_common.c new file mode 100644 index 0000000..af8e878 --- /dev/null +++ b/src/util_common.c @@ -0,0 +1,37 @@ +/* + * Copyright 2018 Jonathan Dieter + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions are met: + * + * 1. Redistributions of source code must retain the above copyright notice, + * this list of conditions and the following disclaimer. + * + * 2. Redistributions in binary form must reproduce the above copyright notice, + * this list of conditions and the following disclaimer in the documentation + * and/or other materials provided with the distribution. + * + * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" + * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE + * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE + * ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE + * LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR + * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF + * SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS + * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN + * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) + * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE + * POSSIBILITY OF SUCH DAMAGE. + */ + +#include +#include +#include +#include + +#include "util_common.h" + +void version() { + printf(ZCK_NAME " " ZCK_VERSION "\nCopyright (c) " ZCK_COPYRIGHT_YEAR + " Jonathan Dieter\n"); +} diff --git a/src/util_common.h b/src/util_common.h new file mode 100644 index 0000000..2f74cfc --- /dev/null +++ b/src/util_common.h @@ -0,0 +1,13 @@ +#ifndef UTIL_COMMON_H +#define UTIL_COMMON_H + +#define ZCK_NAME "zchunk" +#define ZCK_COPYRIGHT_YEAR "2018" + +#ifndef BUF_SIZE +#define BUF_SIZE 32768 +#endif + +void version(); + +#endif diff --git a/src/zck.c b/src/zck.c new file mode 100644 index 0000000..854591c --- /dev/null +++ b/src/zck.c @@ -0,0 +1,299 @@ +/* + * Copyright 2018, 2020 Jonathan Dieter + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions are met: + * + * 1. Redistributions of source code must retain the above copyright notice, + * this list of conditions and the following disclaimer. + * + * 2. Redistributions in binary form must reproduce the above copyright notice, + * this list of conditions and the following disclaimer in the documentation + * and/or other materials provided with the distribution. + * + * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" + * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE + * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE + * ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE + * LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR + * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF + * SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS + * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN + * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) + * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE + * POSSIBILITY OF SUCH DAMAGE. + */ + +#define _GNU_SOURCE + +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include + +#include "util_common.h" +#include "memmem.h" + +static char doc[] = "zck - Create a new zchunk file"; + +static char args_doc[] = ""; + +static struct argp_option options[] = { + {"verbose", 'v', 0, 0, + "Increase verbosity (can be specified more than once for debugging)"}, + {"output", 'o', "FILE", 0, + "Output to specified FILE"}, + {"split", 's', "STRING", 0, "Split chunks at beginning of STRING"}, + {"dict", 'D', "FILE", 0, + "Set zstd compression dictionary to FILE"}, + {"manual-chunk", 'm', 0, 0, + "Don't do any automatic chunking (implies -s)"}, + {"version", 'V', 0, 0, "Show program version"}, + { 0 } +}; + +struct arguments { + char *args[1]; + zck_log_type log_level; + char *split_string; + bool manual_chunk; + char *output; + char *dict; + bool exit; +}; + +static error_t parse_opt (int key, char *arg, struct argp_state *state) { + struct arguments *arguments = state->input; + + if(arguments->exit) + return 0; + + switch (key) { + case 'v': + arguments->log_level--; + if(arguments->log_level < ZCK_LOG_DDEBUG) + arguments->log_level = ZCK_LOG_DDEBUG; + break; + case 's': + arguments->split_string = arg; + break; + case 'm': + arguments->manual_chunk = true; + break; + case 'o': + arguments->output = arg; + break; + case 'D': + arguments->dict = arg; + break; + case 'V': + version(); + arguments->exit = true; + break; + + case ARGP_KEY_ARG: + if (state->arg_num >= 1) { + argp_usage (state); + return EINVAL; + } + arguments->args[state->arg_num] = arg; + + break; + + case ARGP_KEY_END: + if (state->arg_num < 1) { + argp_usage (state); + return EINVAL; + } + break; + + default: + return ARGP_ERR_UNKNOWN; + } + return 0; +} + +static struct argp argp = {options, parse_opt, args_doc, doc}; + +int main (int argc, char *argv[]) { + struct arguments arguments = {0}; + + /* Defaults */ + arguments.log_level = ZCK_LOG_ERROR; + + int retval = argp_parse(&argp, argc, argv, 0, 0, &arguments); + if(retval || arguments.exit) + exit(retval); + + zck_set_log_level(arguments.log_level); + + char *base_name = NULL; + char *out_name = NULL; + if(arguments.output == NULL) { + base_name = basename(arguments.args[0]); + out_name = malloc(strlen(base_name) + 5); + assert(out_name); + snprintf(out_name, strlen(base_name) + 5, "%s.zck", base_name); + } else { + base_name = arguments.output; + out_name = malloc(strlen(base_name) + 1); + assert(out_name); + snprintf(out_name, strlen(base_name) + 1, "%s", base_name); + } + + /* Set dictionary if available */ + char *dict = NULL; + off_t dict_size = 0; + if(arguments.dict != NULL) { + int dict_fd = open(arguments.dict, O_RDONLY); + if(dict_fd < 0) { + dprintf(STDERR_FILENO, "Unable to open dictionary %s for reading", + arguments.dict); + perror(""); + exit(1); + } + dict_size = lseek(dict_fd, 0, SEEK_END); + if(dict_size < 0) { + perror("Unable to seek to end of dictionary"); + exit(1); + } + if(lseek(dict_fd, 0, SEEK_SET) < 0) { + perror("Unable to seek to beginning of dictionary"); + exit(1); + } + dict = malloc(dict_size); + assert(dict); + if(read(dict_fd, dict, dict_size) < dict_size) { + free(dict); + perror("Error reading dict:"); + exit(1); + } + close(dict_fd); + } + + int dst_fd = open(out_name, O_TRUNC | O_WRONLY | O_CREAT, 0666); + if(dst_fd < 0) { + dprintf(STDERR_FILENO, "Unable to open %s", out_name); + perror(""); + if(dict) { + free(dict); + dict = NULL; + } + free(out_name); + exit(1); + } + + zckCtx *zck = zck_create(); + if(zck == NULL) { + dprintf(STDERR_FILENO, "%s", zck_get_error(NULL)); + zck_clear_error(NULL); + exit(1); + } + if(!zck_init_write(zck, dst_fd)) { + dprintf(STDERR_FILENO, "Unable to write to %s: %s", out_name, + zck_get_error(zck)); + exit(1); + } + free(out_name); + + /*if(!zck_set_ioption(zck, ZCK_COMP_TYPE, ZCK_COMP_NONE)) { + perror("Unable to set compression type\n"); + exit(1); + }*/ + if(dict_size > 0) { + if(!zck_set_soption(zck, ZCK_COMP_DICT, dict, dict_size)) { + dprintf(STDERR_FILENO, "%s\n", zck_get_error(zck)); + exit(1); + } + } + free(dict); + if(arguments.manual_chunk) { + if(!zck_set_ioption(zck, ZCK_MANUAL_CHUNK, 1)) { + dprintf(STDERR_FILENO, "%s\n", zck_get_error(zck)); + exit(1); + } + } + + char *data; + int in_fd = open(arguments.args[0], O_RDONLY); + off_t in_size = 0; + if(in_fd < 0) { + dprintf(STDERR_FILENO, "Unable to open %s for reading", + arguments.args[0]); + perror(""); + exit(1); + } + in_size = lseek(in_fd, 0, SEEK_END); + if(in_size < 0) { + dprintf(STDERR_FILENO, "Unable to seek to end of input file"); + exit(1); + } + if(lseek(in_fd, 0, SEEK_SET) < 0) { + perror("Unable to seek to beginning of input file"); + exit(1); + } + if(in_size > 0) { + data = malloc(in_size); + assert(data); + if(read(in_fd, data, in_size) < in_size) { + dprintf(STDERR_FILENO, "Unable to read from input file\n"); + exit(1); + } + close(in_fd); + + if(arguments.split_string) { + char *found = data; + char *search = found; + while(search) { + char *next = memmem(search, in_size - (search-data), + arguments.split_string, + strlen(arguments.split_string)); + if(next) { + if(zck_write(zck, found, next-found) < 0) + exit(1); + if(zck_end_chunk(zck) < 0) + exit(1); + found = next; + search = next + 1; + if(search > data + in_size) + search = data + in_size; + } else { + if(zck_write(zck, found, data+in_size-found) < 0) + exit(1); + if(zck_end_chunk(zck) < 0) + exit(1); + search = NULL; + } + } + /* Buzhash rolling window */ + } else { + if(zck_write(zck, data, in_size) < 0) { + dprintf(STDERR_FILENO, "%s", zck_get_error(zck)); + exit(1); + } + } + free(data); + } + if(!zck_close(zck)) { + printf("%s", zck_get_error(zck)); + exit(1); + } + if(arguments.log_level <= ZCK_LOG_INFO) { + dprintf(STDERR_FILENO, "Wrote %lu bytes in %lu chunks\n", + (unsigned long)(zck_get_data_length(zck) + + zck_get_header_length(zck)), + (long)zck_get_chunk_count(zck)); + } + + zck_free(&zck); + close(dst_fd); +} diff --git a/src/zck_delta_size.c b/src/zck_delta_size.c new file mode 100644 index 0000000..81fb390 --- /dev/null +++ b/src/zck_delta_size.c @@ -0,0 +1,200 @@ +/* + * Copyright 2018 Jonathan Dieter + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions are met: + * + * 1. Redistributions of source code must retain the above copyright notice, + * this list of conditions and the following disclaimer. + * + * 2. Redistributions in binary form must reproduce the above copyright notice, + * this list of conditions and the following disclaimer in the documentation + * and/or other materials provided with the distribution. + * + * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" + * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE + * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE + * ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE + * LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR + * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF + * SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS + * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN + * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) + * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE + * POSSIBILITY OF SUCH DAMAGE. + */ + +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include + +#include "util_common.h" + +static char doc[] = "zck_delta_size - Calculate the difference between" + " two zchunk files"; + +static char args_doc[] = " "; + +static struct argp_option options[] = { + {"verbose", 'v', 0, 0, + "Increase verbosity (can be specified more than once for debugging)"}, + {"version", 'V', 0, 0, "Show program version"}, + { 0 } +}; + +struct arguments { + char *args[2]; + zck_log_type log_level; + bool exit; +}; + +static error_t parse_opt (int key, char *arg, struct argp_state *state) { + struct arguments *arguments = state->input; + + if(arguments->exit) + return 0; + + switch (key) { + case 'v': + arguments->log_level--; + if(arguments->log_level < ZCK_LOG_DDEBUG) + arguments->log_level = ZCK_LOG_DDEBUG; + break; + case 'V': + version(); + arguments->exit = true; + break; + + case ARGP_KEY_ARG: + if (state->arg_num >= 2) { + argp_usage (state); + return EINVAL; + } + arguments->args[state->arg_num] = arg; + + break; + + case ARGP_KEY_END: + if (state->arg_num < 2) { + argp_usage (state); + return EINVAL; + } + break; + + default: + return ARGP_ERR_UNKNOWN; + } + return 0; +} + +static struct argp argp = {options, parse_opt, args_doc, doc}; + +int main (int argc, char *argv[]) { + struct arguments arguments = {0}; + + /* Defaults */ + arguments.log_level = ZCK_LOG_ERROR; + + int retval = argp_parse(&argp, argc, argv, 0, 0, &arguments); + if(retval || arguments.exit) + exit(retval); + + zck_set_log_level(arguments.log_level); + + int src_fd = open(arguments.args[0], O_RDONLY); + if(src_fd < 0) { + dprintf(STDERR_FILENO, "Unable to open %s\n", arguments.args[0]); + perror(""); + exit(1); + } + zckCtx *zck_src = zck_create(); + if(zck_src == NULL) { + dprintf(STDERR_FILENO, "%s", zck_get_error(NULL)); + zck_clear_error(NULL); + exit(1); + } + if(!zck_init_read(zck_src, src_fd)) { + dprintf(STDERR_FILENO, "Error reading %s: %s", arguments.args[0], + zck_get_error(zck_src)); + zck_free(&zck_src); + exit(1); + } + close(src_fd); + + int tgt_fd = open(arguments.args[1], O_RDONLY); + if(tgt_fd < 0) { + dprintf(STDERR_FILENO, "Unable to open %s\n", arguments.args[1]); + perror(""); + zck_free(&zck_src); + exit(1); + } + zckCtx *zck_tgt = zck_create(); + if(zck_tgt == NULL) { + dprintf(STDERR_FILENO, "%s", zck_get_error(NULL)); + zck_clear_error(NULL); + zck_free(&zck_src); + exit(1); + } + if(!zck_init_read(zck_tgt, tgt_fd)) { + dprintf(STDERR_FILENO, "Error reading %s: %s", arguments.args[1], + zck_get_error(zck_tgt)); + zck_free(&zck_src); + zck_free(&zck_tgt); + exit(1); + } + close(tgt_fd); + + if(zck_get_chunk_hash_type(zck_tgt) != zck_get_chunk_hash_type(zck_src)) { + dprintf(STDERR_FILENO, "ERROR: Chunk hash types don't match:\n"); + dprintf(STDERR_FILENO, " %s: %s\n", arguments.args[0], + zck_hash_name_from_type(zck_get_chunk_hash_type(zck_tgt))); + dprintf(STDERR_FILENO, " %s: %s\n", arguments.args[1], + zck_hash_name_from_type(zck_get_chunk_hash_type(zck_src))); + zck_free(&zck_src); + zck_free(&zck_tgt); + exit(1); + } + zckChunk *tgt_idx = zck_get_first_chunk(zck_tgt); + zckChunk *src_idx = zck_get_first_chunk(zck_src); + if(tgt_idx == NULL || src_idx == NULL) + exit(1); + + if(!zck_compare_chunk_digest(tgt_idx, src_idx)) + dprintf(STDERR_FILENO, "WARNING: Dicts don't match\n"); + ssize_t dl_size = zck_get_header_length(zck_tgt); + if(dl_size < 0) + exit(1); + ssize_t total_size = zck_get_header_length(zck_tgt); + ssize_t matched_chunks = 0; + for(tgt_idx = zck_get_first_chunk(zck_tgt); tgt_idx; + tgt_idx = zck_get_next_chunk(tgt_idx)) { + bool found = false; + for(src_idx = zck_get_first_chunk(zck_src); src_idx; + src_idx = zck_get_next_chunk(src_idx)) { + if(zck_compare_chunk_digest(tgt_idx, src_idx)) { + found = true; + break; + } + } + if(!found) { + dl_size += zck_get_chunk_comp_size(tgt_idx); + } else { + matched_chunks += 1; + } + total_size += zck_get_chunk_comp_size(tgt_idx); + } + printf("Would download %li of %li bytes\n", (long)dl_size, + (long)total_size); + printf("Matched %li of %lu chunks\n", (long)matched_chunks, + (long unsigned)zck_get_chunk_count(zck_tgt)); + zck_free(&zck_tgt); + zck_free(&zck_src); +} diff --git a/src/zck_dl.c b/src/zck_dl.c new file mode 100644 index 0000000..b19471e --- /dev/null +++ b/src/zck_dl.c @@ -0,0 +1,483 @@ +/* + * Copyright 2018, 2020 Jonathan Dieter + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions are met: + * + * 1. Redistributions of source code must retain the above copyright notice, + * this list of conditions and the following disclaimer. + * + * 2. Redistributions in binary form must reproduce the above copyright notice, + * this list of conditions and the following disclaimer in the documentation + * and/or other materials provided with the distribution. + * + * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" + * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE + * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE + * ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE + * LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR + * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF + * SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS + * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN + * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) + * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE + * POSSIBILITY OF SUCH DAMAGE. + */ + +#define _GNU_SOURCE + +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include + +#include "util_common.h" + +static char doc[] = "zckdl - Download zchunk file"; + +static char args_doc[] = ""; + +static struct argp_option options[] = { + {"verbose", 'v', 0, 0, "Increase verbosity"}, + {"quiet", 'q', 0, 0, + "Only show warnings (can be specified twice to only show errors)"}, + {"source", 's', "FILE", 0, "File to use as delta source"}, + {"fail-no-ranges", 1000, 0, 0, + "If server doesn't support ranges, fail instead of downloading full file"}, + {"version", 'V', 0, 0, "Show program version"}, + { 0 } +}; + +static int range_attempt[] = { + 255, + 127, + 7, + 2, + 1 +}; + +struct arguments { + char *args[1]; + zck_log_type log_level; + char *source; + int fail_no_ranges; + bool exit; +}; + +static error_t parse_opt (int key, char *arg, struct argp_state *state) { + struct arguments *arguments = state->input; + + if(arguments->exit) + return 0; + + switch (key) { + case 'v': + if(arguments->log_level > ZCK_LOG_INFO) + arguments->log_level = ZCK_LOG_INFO; + arguments->log_level--; + if(arguments->log_level < ZCK_LOG_DDEBUG) + arguments->log_level = ZCK_LOG_DDEBUG; + break; + case 'q': + if(arguments->log_level < ZCK_LOG_INFO) + arguments->log_level = ZCK_LOG_INFO; + arguments->log_level += 1; + if(arguments->log_level > ZCK_LOG_NONE) + arguments->log_level = ZCK_LOG_NONE; + break; + case 's': + arguments->source = arg; + break; + case 'V': + version(); + arguments->exit = true; + break; + case 1000: + arguments->fail_no_ranges = 1; + break; + case ARGP_KEY_ARG: + if (state->arg_num >= 1) { + argp_usage (state); + return EINVAL; + } + arguments->args[state->arg_num] = arg; + + break; + + case ARGP_KEY_END: + if (state->arg_num < 1) { + argp_usage (state); + return EINVAL; + } + break; + + default: + return ARGP_ERR_UNKNOWN; + } + return 0; +} + +static struct argp argp = {options, parse_opt, args_doc, doc}; + +typedef struct dlCtx { + CURL *curl; + zckDL *dl; + int fail_no_ranges; + int range_fail; + int max_ranges; +} dlCtx; + +/* Fail if dl_ctx->fail_no_ranges is set and we get a 200 response */ +size_t dl_header_cb(char *b, size_t l, size_t c, void *dl_v) { + dlCtx *dl_ctx = (dlCtx*)dl_v; + if(dl_ctx->fail_no_ranges) { + long code = -1; + curl_easy_getinfo(dl_ctx->curl, CURLINFO_RESPONSE_CODE, &code); + if(code == 200) { + dl_ctx->range_fail = 1; + return 0; + } + } + return zck_header_cb(b, l, c, dl_ctx->dl); +} + +/* Return 0 on error, -1 on 200 response (if dl_ctx->fail_no_ranges), + * and 1 on complete success */ +int dl_range(dlCtx *dl_ctx, char *url, char *range, int is_chunk) { + if(dl_ctx == NULL || dl_ctx->dl == NULL) { + free(range); + dprintf(STDERR_FILENO, "Struct not defined\n"); + return 0; + } + + CURL *curl = dl_ctx->curl; + CURLcode res; + + curl_easy_setopt(curl, CURLOPT_URL, url); + curl_easy_setopt(curl, CURLOPT_FOLLOWLOCATION, 1L); + curl_easy_setopt(curl, CURLOPT_HEADERFUNCTION, dl_header_cb); + curl_easy_setopt(curl, CURLOPT_HEADERDATA, dl_ctx); + if(is_chunk) + curl_easy_setopt(curl, CURLOPT_WRITEFUNCTION, zck_write_chunk_cb); + else + curl_easy_setopt(curl, CURLOPT_WRITEFUNCTION, zck_write_zck_header_cb); + curl_easy_setopt(curl, CURLOPT_WRITEDATA, dl_ctx->dl); + curl_easy_setopt(curl, CURLOPT_RANGE, range); + res = curl_easy_perform(curl); + free(range); + + if(dl_ctx->range_fail) + return -1; + + if(res != CURLE_OK) { + dprintf(STDERR_FILENO, "Download failed: %s\n", + curl_easy_strerror(res)); + return 0; + } + long code; + curl_easy_getinfo (curl, CURLINFO_RESPONSE_CODE, &code); + if (code != 206 && code != 200) { + dprintf(STDERR_FILENO, "HTTP Error: %li when downloading %s\n", code, + url); + return 0; + } + + + return 1; +} + + +int dl_byte_range(dlCtx *dl_ctx, char *url, int start, int end) { + char *range = NULL; + zck_dl_reset(dl_ctx->dl); + if(start > -1 && end > -1) + range = zck_get_range(start, end); + return dl_range(dl_ctx, url, range, 0); +} + +int dl_bytes(dlCtx *dl_ctx, char *url, size_t bytes, size_t start, + size_t *buffer_len, int log_level) { + if(start + bytes > *buffer_len) { + zckDL *dl = dl_ctx->dl; + + int fd = zck_get_fd(zck_dl_get_zck(dl)); + + if(lseek(fd, *buffer_len, SEEK_SET) == -1) { + dprintf(STDERR_FILENO, "Seek to download location failed: %s\n", + strerror(errno)); + return 0; + } + if(*buffer_len >= start + bytes) + return 1; + + int retval = dl_byte_range(dl_ctx, url, *buffer_len, + (start + bytes) - 1); + if(retval < 1) + return retval; + + if(log_level <= ZCK_LOG_DEBUG) + dprintf(STDERR_FILENO, "Downloading %lu bytes at position %lu\n", + (unsigned long)start+bytes-*buffer_len, + (unsigned long)*buffer_len); + *buffer_len += start + bytes - *buffer_len; + if(lseek(fd, start, SEEK_SET) == -1) { + dprintf(STDERR_FILENO, + "Seek to byte %lu of temporary file failed: %s\n", + (unsigned long)start, strerror(errno)); + return 0; + } + } + return 1; +} + +int dl_header(CURL *curl, zckDL *dl, char *url, int fail_no_ranges, + int log_level) { + size_t buffer_len = 0; + size_t start = 0; + + dlCtx dl_ctx = {0}; + dl_ctx.fail_no_ranges = 1; + dl_ctx.dl = dl; + dl_ctx.curl = curl; + dl_ctx.max_ranges = 1; + + /* Download minimum download size and read magic and hash type */ + int retval = dl_bytes(&dl_ctx, url, zck_get_min_download_size(), start, + &buffer_len, log_level); + if(retval < 1) + return retval; + + zckCtx *zck = zck_dl_get_zck(dl); + if(zck == NULL) + return 0; + + if(!zck_read_lead(zck)) + return 0; + start = zck_get_lead_length(zck); + if(!dl_bytes(&dl_ctx, url, zck_get_header_length(zck) - start, + start, &buffer_len, log_level)) + return 0; + if(!zck_read_header(zck)) + return 0; + return 1; +} + +int main (int argc, char *argv[]) { + struct arguments arguments = {0}; + + /* Defaults */ + arguments.log_level = ZCK_LOG_INFO; + + int retval = argp_parse (&argp, argc, argv, 0, 0, &arguments); + if(retval || arguments.exit) + exit(retval); + + curl_global_init(CURL_GLOBAL_ALL); + + zck_set_log_level(arguments.log_level); + + zckCtx *zck_src = NULL; + if(arguments.source) { + int src_fd = open(arguments.source, O_RDONLY); + if(src_fd < 0) { + dprintf(STDERR_FILENO, "Unable to open %s\n", arguments.source); + perror(""); + exit(10); + } + zck_src = zck_create(); + if(zck_src == NULL) { + dprintf(STDERR_FILENO, "%s", zck_get_error(NULL)); + zck_clear_error(NULL); + exit(10); + } + if(!zck_init_read(zck_src, src_fd)) { + dprintf(STDERR_FILENO, "Unable to open %s: %s", arguments.source, + zck_get_error(zck_src)); + exit(10); + } + } + + CURL *curl_ctx = curl_easy_init(); + if(!curl_ctx) { + dprintf(STDERR_FILENO, "Unable to allocate %lu bytes for curl context\n", + (unsigned long)sizeof(CURL)); + exit(10); + } + + char *outname = basename(arguments.args[0]); + int dst_fd = open(outname, O_RDWR | O_CREAT, 0666); + if(dst_fd < 0) { + dprintf(STDERR_FILENO, "Unable to open %s: %s\n", outname, + strerror(errno)); + exit(10); + } + zckCtx *zck_tgt = zck_create(); + if(zck_tgt == NULL) { + dprintf(STDERR_FILENO, "%s", zck_get_error(NULL)); + zck_clear_error(NULL); + exit(10); + } + if(!zck_init_adv_read(zck_tgt, dst_fd)) { + dprintf(STDERR_FILENO, "%s", zck_get_error(zck_tgt)); + exit(10); + } + + zckDL *dl = zck_dl_init(zck_tgt); + if(dl == NULL) { + dprintf(STDERR_FILENO, "%s", zck_get_error(NULL)); + zck_clear_error(NULL); + exit(10); + } + + int exit_val = 0; + + retval = dl_header(curl_ctx, dl, arguments.args[0], + arguments.fail_no_ranges, arguments.log_level); + if(!retval) { + exit_val = 10; + goto out; + } + + /* The server doesn't support ranges */ + if(retval == -1) { + if(arguments.fail_no_ranges) { + dprintf(STDERR_FILENO, + "Server doesn't support ranges and --fail-no-ranges was " + "set\n"); + exit_val = 2; + goto out; + } + /* Download the full file */ + lseek(dst_fd, 0, SEEK_SET); + if(ftruncate(dst_fd, 0) < 0) { + perror(NULL); + exit_val = 10; + goto out; + } + dlCtx dl_ctx = {0}; + dl_ctx.dl = dl; + dl_ctx.curl = curl_ctx; + dl_ctx.max_ranges = 0; + if(!dl_byte_range(&dl_ctx, arguments.args[0], -1, -1)) { + exit_val = 10; + goto out; + } + lseek(dst_fd, 0, SEEK_SET); + if(!zck_read_lead(zck_tgt) || !zck_read_header(zck_tgt)) { + exit_val = 10; + goto out; + } + } else { + /* If file is already fully downloaded, let's get out of here! */ + int retval = zck_find_valid_chunks(zck_tgt); + if(retval == 0) { + exit_val = 10; + goto out; + } + if(retval == 1) { + printf("Missing chunks: 0\n"); + printf("Downloaded %lu bytes\n", + (long unsigned)zck_dl_get_bytes_downloaded(dl)); + if(ftruncate(dst_fd, zck_get_length(zck_tgt)) < 0) { + perror(NULL); + exit_val = 10; + goto out; + } + exit_val = 0; + goto out; + } + if(zck_src && !zck_copy_chunks(zck_src, zck_tgt)) { + exit_val = 10; + goto out; + } + zck_reset_failed_chunks(zck_tgt); + dlCtx dl_ctx = {0}; + dl_ctx.dl = dl; + dl_ctx.curl = curl_ctx; + dl_ctx.max_ranges = range_attempt[0]; + dl_ctx.fail_no_ranges = 1; + int ra_index = 0; + printf("Missing chunks: %i\n", zck_missing_chunks(zck_tgt)); + while(zck_missing_chunks(zck_tgt) > 0) { + dl_ctx.range_fail = 0; + zck_dl_reset(dl); + zckRange *range = zck_get_missing_range(zck_tgt, dl_ctx.max_ranges); + if(range == NULL || !zck_dl_set_range(dl, range)) { + exit_val = 10; + goto out; + } + while(range_attempt[ra_index] > 1 && + range_attempt[ra_index+1] > zck_get_range_count(range)) + ra_index++; + char *range_string = zck_get_range_char(zck_src, range); + if(range_string == NULL) { + exit_val = 10; + goto out; + } + int retval = dl_range(&dl_ctx, arguments.args[0], range_string, 1); + if(retval == -1) { + if(dl_ctx.max_ranges > 1) { + ra_index += 1; + dl_ctx.max_ranges = range_attempt[ra_index]; + } + dprintf(STDERR_FILENO, + "Tried downloading too many ranges, reducing to %i\n", + dl_ctx.max_ranges); + } + if(!zck_dl_set_range(dl, NULL)) { + exit_val = 10; + goto out; + } + zck_range_free(&range); + if(!retval) { + exit_val = 1; + goto out; + } + } + } + printf("Downloaded %lu bytes\n", + (long unsigned)zck_dl_get_bytes_downloaded(dl)); + if(ftruncate(dst_fd, zck_get_length(zck_tgt)) < 0) { + perror(NULL); + exit_val = 10; + goto out; + } + + switch(zck_validate_data_checksum(zck_tgt)) { + case -1: + exit_val = 1; + break; + case 0: + exit_val = 1; + break; + default: + break; + } +out: + if(exit_val > 0) { + if(zck_is_error(NULL)) { + dprintf(STDERR_FILENO, "%s", zck_get_error(NULL)); + zck_clear_error(NULL); + } + if(zck_is_error(zck_src)) + dprintf(STDERR_FILENO, "%s", zck_get_error(zck_src)); + if(zck_is_error(zck_tgt)) + dprintf(STDERR_FILENO, "%s", zck_get_error(zck_tgt)); + } + zck_dl_free(&dl); + zck_free(&zck_tgt); + zck_free(&zck_src); + curl_easy_cleanup(curl_ctx); + curl_global_cleanup(); + exit(exit_val); +} diff --git a/src/zck_gen_zdict.c b/src/zck_gen_zdict.c new file mode 100644 index 0000000..0263eea --- /dev/null +++ b/src/zck_gen_zdict.c @@ -0,0 +1,319 @@ +/* + * Copyright 2018, 2020 Jonathan Dieter + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions are met: + * + * 1. Redistributions of source code must retain the above copyright notice, + * this list of conditions and the following disclaimer. + * + * 2. Redistributions in binary form must reproduce the above copyright notice, + * this list of conditions and the following disclaimer in the documentation + * and/or other materials provided with the distribution. + * + * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" + * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE + * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE + * ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE + * LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR + * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF + * SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS + * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN + * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) + * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE + * POSSIBILITY OF SUCH DAMAGE. + */ + +#define _GNU_SOURCE + +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include + +#include "util_common.h" + +static char doc[] = "zck_gen_zdict - Generate a zdict for a zchunk file"; + +static char args_doc[] = ""; + +static struct argp_option options[] = { + {"verbose", 'v', 0, 0, + "Increase verbosity (can be specified more than once for debugging)"}, + /*{"stdout", 'c', 0, 0, "Direct output to stdout"},*/ + {"dir", 'd', "DIRECTORY", 0, + "Write individual chunks to DIRECTORY (defaults to temporary directory)"}, + {"version", 'V', 0, 0, "Show program version"}, + { 0 } +}; + +struct arguments { + char *args[1]; + char *dir; + zck_log_type log_level; + bool stdout; + bool exit; +}; + +static error_t parse_opt (int key, char *arg, struct argp_state *state) { + struct arguments *arguments = state->input; + + if(arguments->exit) + return 0; + + switch (key) { + case 'v': + arguments->log_level--; + if(arguments->log_level < ZCK_LOG_DDEBUG) + arguments->log_level = ZCK_LOG_DDEBUG; + break; + /*case 'c': + arguments->stdout = true; + break;*/ + case 'd': + arguments->dir = arg; + break; + case 'V': + version(); + arguments->exit = true; + break; + case ARGP_KEY_ARG: + if (state->arg_num >= 1) { + argp_usage (state); + return EINVAL; + } + arguments->args[state->arg_num] = arg; + + break; + + case ARGP_KEY_END: + if (state->arg_num < 1) { + argp_usage (state); + return EINVAL; + } + break; + + default: + return ARGP_ERR_UNKNOWN; + } + return 0; +} + +static struct argp argp = {options, parse_opt, args_doc, doc}; + +char *get_tmp_dir(char *old_dir) { + char *dir = NULL; + if(old_dir == NULL) { + char template[] = "zcktempXXXXXX"; + char *tmpdir = getenv("TMPDIR"); + + if(tmpdir == NULL) { + tmpdir = "/tmp/"; + } else if(strlen(tmpdir) > 1024) { + printf("TMPDIR environmental variable is > 1024 bytes\n"); + return NULL; + } + + char *base_dir = calloc(strlen(template) + strlen(tmpdir) + 2, 1); + assert(base_dir); + int i=0; + for(i=0; i .zdict = +2 + \0 = +3 + char *out_name = calloc(strlen(base_name) + 3, 1); + assert(out_name); + snprintf(out_name, strlen(base_name) - 3, "%s", base_name); //Strip off .zck + + char *dir = get_tmp_dir(arguments.dir); + if(dir == NULL) { + free(out_name); + exit(1); + } + bool good_exit = false; + + char *data = NULL; + zckCtx *zck = zck_create(); + if(!zck_init_read(zck, src_fd)) { + dprintf(STDERR_FILENO, "%s", zck_get_error(zck)); + goto error2; + } + + int ret = zck_validate_data_checksum(zck); + if(ret < 1) { + if(ret == -1) + dprintf(STDERR_FILENO, "Data checksum failed verification\n"); + goto error2; + } + + for(zckChunk *idx=zck_get_first_chunk(zck); idx!=NULL; + idx=zck_get_next_chunk(idx)) { + // Skip dictionary + if(idx == zck_get_first_chunk(zck)) + continue; + ssize_t chunk_size = zck_get_chunk_size(idx); + if(chunk_size < 0) { + dprintf(STDERR_FILENO, "%s", zck_get_error(zck)); + goto error2; + } + data = calloc(chunk_size, 1); + assert(data); + ssize_t read_size = zck_get_chunk_data(idx, data, chunk_size); + if(read_size != chunk_size) { + if(read_size < 0) + dprintf(STDERR_FILENO, "%s", zck_get_error(zck)); + else + dprintf(STDERR_FILENO, + "Chunk %li size doesn't match expected size: %li != %li\n", + zck_get_chunk_number(idx), read_size, chunk_size); + goto error2; + } + + char *dict_block = calloc(strlen(dir) + strlen(out_name) + 12, 1); + assert(dict_block); + snprintf(dict_block, strlen(dir) + strlen(out_name) + 12, "%s/%s.%li", + dir, out_name, zck_get_chunk_number(idx)); + int dst_fd = open(dict_block, O_TRUNC | O_WRONLY | O_CREAT, 0666); + if(dst_fd < 0) { + dprintf(STDERR_FILENO, "Unable to open %s", dict_block); + perror(""); + free(dict_block); + goto error2; + } + if(write(dst_fd, data, chunk_size) != chunk_size) { + dprintf(STDERR_FILENO, "Error writing to %s\n", dict_block); + free(dict_block); + goto error2; + } + free(data); + close(dst_fd); + free(dict_block); + } + snprintf(out_name + strlen(base_name) - 4, 7, ".zdict"); + + if(!zck_close(zck)) { + dprintf(STDERR_FILENO, "%s", zck_get_error(zck)); + goto error2; + } + + /* Create dictionary */ + int pid = fork(); + if(pid == 0) { + execl("/usr/bin/zstd", "zstd", "--train", dir, "-r", "-o", out_name, NULL); + dprintf(STDERR_FILENO, "Unable to find /usr/bin/zstd\n"); + exit(1); + } + int wstatus = 0; + int w = waitpid(pid, &wstatus, 0); + if (w == -1) { + dprintf(STDERR_FILENO, "Error waiting for zstd\n"); + perror(""); + goto error2; + } + if(WEXITSTATUS(wstatus) != 0) { + dprintf(STDERR_FILENO, "Error generating dict\n"); + goto error2; + } + + /* Clean up temporary directory */ + if(!arguments.dir) { + struct dirent *dp; + DIR *dfd; + + if ((dfd = opendir(dir)) == NULL) { + dprintf(STDERR_FILENO, "Unable to read %s\n", dir); + goto error2; + } + + bool err = false; + while((dp = readdir(dfd)) != NULL) { + if(dp->d_name[0] == '.') + continue; + char *full_path = calloc(strlen(dir) + strlen(dp->d_name) + 2, 1); + snprintf(full_path, strlen(dir) + strlen(dp->d_name) + 2, "%s/%s", + dir, dp->d_name); + if(unlink(full_path) != 0) { + dprintf(STDERR_FILENO, "Unable to remove %s\n", full_path); + perror(""); + err = true; + } else { + if(arguments.log_level <= ZCK_LOG_INFO) + dprintf(STDERR_FILENO, "Removed %s\n", full_path); + } + free(full_path); + } + closedir(dfd); + if(!err) { + if(rmdir(dir) != 0) { + dprintf(STDERR_FILENO, "Unable to remove %s\n", dir); + perror(""); + } + } else { + dprintf(STDERR_FILENO, "Errors encountered, not removing %s\n", + dir); + } + } + good_exit = true; +error2: + free(dir); + zck_free(&zck); + if(!good_exit) + unlink(out_name); + free(out_name); + close(src_fd); + if(!good_exit) + exit(1); + exit(0); +} diff --git a/src/zck_read_header.c b/src/zck_read_header.c new file mode 100644 index 0000000..a159ea5 --- /dev/null +++ b/src/zck_read_header.c @@ -0,0 +1,203 @@ +/* + * Copyright 2018 Jonathan Dieter + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions are met: + * + * 1. Redistributions of source code must retain the above copyright notice, + * this list of conditions and the following disclaimer. + * + * 2. Redistributions in binary form must reproduce the above copyright notice, + * this list of conditions and the following disclaimer in the documentation + * and/or other materials provided with the distribution. + * + * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" + * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE + * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE + * ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE + * LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR + * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF + * SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS + * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN + * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) + * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE + * POSSIBILITY OF SUCH DAMAGE. + */ + +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include + +#include "util_common.h" + +static char doc[] = "zck_read_header - Read header from a zchunk file"; + +static char args_doc[] = ""; + +static struct argp_option options[] = { + {"verbose", 'v', 0, 0, + "Increase verbosity (can be specified more than once for debugging)"}, + {"show-chunks", 'c', 0, 0, "Show chunk information"}, + {"quiet", 'q', 0, 0, "Only show errors"}, + {"version", 'V', 0, 0, "Show program version"}, + {"verify", 'f', 0, 0, "Verify full zchunk file"}, + { 0 } +}; + +struct arguments { + char *args[1]; + bool verify; + bool quiet; + bool show_chunks; + zck_log_type log_level; + bool exit; +}; + +static error_t parse_opt (int key, char *arg, struct argp_state *state) { + struct arguments *arguments = state->input; + + if(arguments->exit) + return 0; + + switch (key) { + case 'v': + arguments->log_level--; + if(arguments->log_level < ZCK_LOG_DDEBUG) + arguments->log_level = ZCK_LOG_DDEBUG; + break; + case 'c': + arguments->show_chunks = true; + break; + case 'q': + arguments->quiet = true; + break; + case 'V': + version(); + arguments->exit = true; + break; + case 'f': + arguments->verify = true; + break; + + case ARGP_KEY_ARG: + if (state->arg_num >= 1) { + argp_usage (state); + return EINVAL; + } + arguments->args[state->arg_num] = arg; + + break; + + case ARGP_KEY_END: + if (state->arg_num < 1) { + argp_usage (state); + return EINVAL; + } + break; + + default: + return ARGP_ERR_UNKNOWN; + } + return 0; +} + +static struct argp argp = {options, parse_opt, args_doc, doc}; + +int main (int argc, char *argv[]) { + struct arguments arguments = {0}; + + /* Defaults */ + arguments.log_level = ZCK_LOG_ERROR; + + int retval = argp_parse (&argp, argc, argv, 0, 0, &arguments); + if(retval || arguments.exit) + exit(retval); + + zck_set_log_level(arguments.log_level); + + int src_fd = open(arguments.args[0], O_RDONLY); + if(src_fd < 0) { + printf("Unable to open %s\n", arguments.args[0]); + perror(""); + exit(1); + } + + zckCtx *zck = zck_create(); + if(zck == NULL) { + dprintf(STDERR_FILENO, "%s", zck_get_error(NULL)); + zck_clear_error(NULL); + exit(1); + } + if(!zck_init_read(zck, src_fd)) { + dprintf(STDERR_FILENO, "Error reading zchunk header: %s", + zck_get_error(zck)); + zck_free(&zck); + exit(1); + } + + int valid_cks = 1; + if(arguments.verify) { + valid_cks = zck_validate_checksums(zck); + if(!valid_cks) + exit(1); + } + close(src_fd); + + if(!arguments.quiet) { + printf("Overall checksum type: %s\n", + zck_hash_name_from_type(zck_get_full_hash_type(zck))); + printf("Header size: %lu\n", zck_get_header_length(zck)); + char *digest = zck_get_header_digest(zck); + printf("Header checksum: %s\n", digest); + free(digest); + printf("Data size: %lu\n", zck_get_data_length(zck)); + digest = zck_get_data_digest(zck); + printf("Data checksum: %s\n", digest); + free(digest); + printf("Chunk count: %lu\n", (long unsigned)zck_get_chunk_count(zck)); + printf("Chunk checksum type: %s\n", zck_hash_name_from_type(zck_get_chunk_hash_type(zck))); + } + if(!arguments.quiet && arguments.show_chunks) + printf("\n"); + if(arguments.show_chunks) { + printf(" Chunk Checksum %*c Start Comp size Size\n", + (((int)zck_get_chunk_digest_size(zck)*2)-9), ' '); + for(zckChunk *chk=zck_get_first_chunk(zck); chk; + chk=zck_get_next_chunk(chk)) { + char *digest = zck_get_chunk_digest(chk); + if(digest == NULL) { + dprintf(STDERR_FILENO, "%s", zck_get_error(zck)); + exit(1); + } + printf("%12lu %s %12lu %12lu %12lu", + (long unsigned)zck_get_chunk_number(chk), + digest, + (long unsigned)zck_get_chunk_start(chk), + (long unsigned)zck_get_chunk_comp_size(chk), + (long unsigned)zck_get_chunk_size(chk)); + if(arguments.verify) { + if(zck_get_chunk_valid(chk) == 1) + printf(" +"); + else + printf(" !"); + } + printf("\n"); + free(digest); + } + } + if(arguments.verify) { + if(valid_cks == 1 && arguments.log_level <= ZCK_LOG_WARNING) + printf("All checksums are valid\n"); + else if(valid_cks == -1) + printf("Some checksums failed\n"); + } + zck_free(&zck); + return 1-valid_cks; +} diff --git a/test/abi.sh b/test/abi.sh new file mode 100755 index 0000000..6cfcb00 --- /dev/null +++ b/test/abi.sh @@ -0,0 +1,34 @@ +#!/bin/sh +cd "$(dirname "$0")" + +if [ ! -e ../build/src/lib/libzck.so.*.*.* ]; then + echo "No library exists" + exit 1 +fi + +# Copy latest build to abi/new and remove softlinks +rm abi/new -rf +mkdir -p abi/new +cp -a ../build/src/lib/libzck.so.* abi/new +cp -a ../build/include/zck.h abi/new +find abi -type l -delete + +# Redump abi/stable +cd abi/stable +abi-dumper libzck.so.* -lver `cat zck.h | grep ZCK_VERSION | head -n 1 | awk '{ print $3 }' | sed s/\"//g` -public-headers `pwd abi/stable` +if [ "$?" -ne 0 ]; then + exit 1 +fi + +# Dump abi/new +cd ../new +abi-dumper libzck.so.* -lver `cat zck.h | grep ZCK_VERSION | head -n 1 | awk '{ print $3 }' | sed s/\"//g` -public-headers `pwd abi/new` +if [ "$?" -ne 0 ]; then + exit 1 +fi +cd ../../ + +# Remove any old reports and generate new abi compliance report +rm compat_reports -rf +abi-compliance-checker -l zchunk -old abi/stable/ABI.dump -new abi/new/ABI.dump +exit $? diff --git a/test/compat_reports/zchunk/1.1.6_to_1.1.7/compat_report.html b/test/compat_reports/zchunk/1.1.6_to_1.1.7/compat_report.html new file mode 100644 index 0000000..0d2111b --- /dev/null +++ b/test/compat_reports/zchunk/1.1.6_to_1.1.7/compat_report.html @@ -0,0 +1,502 @@ + + + + + + + + + + +zchunk: 1.1.6 to 1.1.7 compatibility report + + + +

API compatibility report for the libzck.so object between 1.1.6 and 1.1.7 versions on x86_64

+ +
+
+

Test Info


+ + + + + + +
Module Namezchunk
Version #11.1.6 (gcc 9.2.1)
Version #21.1.7 (gcc 10.2.1)
Archx86_64
SubjectBinary Compatibility
+

Test Results


+ + + + + + + +
Total Header Files1
Total Source Files9
Total Objects1
Total Symbols / Types75 / 21
Compatibility100%
+

Problem Summary


+ + + + + + + + + +
SeverityCount
Added Symbols-0
Removed SymbolsHigh0
Problems with
Data Types
High0
Medium0
Low0
Problems with
Symbols
High0
Medium0
Low0
Problems with
Constants
Low0
+ +

Header Files  1 


+
+zck.h
+
+
to the top
+

Source Files  9 


+
+comp.c
+dl.c
+error.c
+hash.c
+header.c
+index_read.c
+log.c
+range.c
+zck.c
+
+
to the top
+

Objects  1 


+
+libzck.so.1.1.6
+
+
to the top
+


+

Test Info


+ + + + + + +
Module Namezchunk
Version #11.1.6
Version #21.1.7
Archx86_64
SubjectSource Compatibility
+

Test Results


+ + + + + + + +
Total Header Files1
Total Source Files9
Total Objects1
Total Symbols / Types75 / 21
Compatibility100%
+

Problem Summary


+ + + + + + + + + +
SeverityCount
Added Symbols-0
Removed SymbolsHigh0
Problems with
Data Types
High0
Medium0
Low0
Problems with
Symbols
High0
Medium0
Low0
Problems with
Constants
Low0
+ +

Header Files  1 


+
+zck.h
+
+
to the top
+

Source Files  9 


+
+comp.c
+dl.c
+error.c
+hash.c
+header.c
+index_read.c
+log.c
+range.c
+zck.c
+
+
to the top
+

Objects  1 


+
+libzck.so.1.1.6
+
+
to the top
+



+ +
+ + diff --git a/test/copy_chunks.c b/test/copy_chunks.c new file mode 100644 index 0000000..111132c --- /dev/null +++ b/test/copy_chunks.c @@ -0,0 +1,123 @@ +/* + * Copyright 2018, 2020 Jonathan Dieter + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions are met: + * + * 1. Redistributions of source code must retain the above copyright notice, + * this list of conditions and the following disclaimer. + * + * 2. Redistributions in binary form must reproduce the above copyright notice, + * this list of conditions and the following disclaimer in the documentation + * and/or other materials provided with the distribution. + * + * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" + * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE + * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE + * ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE + * LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR + * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF + * SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS + * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN + * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) + * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE + * POSSIBILITY OF SUCH DAMAGE. + */ + +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include "zck_private.h" +#include "util.h" + +int main (int argc, char *argv[]) { + zck_set_log_level(ZCK_LOG_DEBUG); + char *path = zmalloc(strlen(argv[1])+1); + strcpy(path, argv[1]); + + char *base_name = basename(path); + int in = open(argv[1], O_RDONLY); + if(in < 0) { + perror("Unable to open LICENSE.header.new.nodict.fodt.zck for reading"); + exit(1); + } + int tgt = open(base_name, O_RDWR | O_CREAT, 0666); + if(tgt < 0) { + perror("Unable to open LICENSE.header.new.nodict.fodt.zck for writing"); + exit(1); + } + char buffer[4096] = {0}; + int len = 0; + while((len=read(in, buffer, 4096)) > 0) { + if(write(tgt, buffer, len) < len) { + perror("Unable to write to LICENSE.header.new.nodict.fodt.zck"); + exit(1); + } + } + lseek(tgt, 0, SEEK_SET); + + /* Open target zchunk header and read */ + zckCtx *tgt_zck = zck_create(); + if(tgt_zck == NULL) + exit(1); + if(!zck_init_adv_read(tgt_zck, tgt)) { + printf("%s", zck_get_error(tgt_zck)); + exit(1); + } + + /* Open source zchunk file and read header */ + int src = open(argv[2], O_RDONLY); + if(src < 0) { + perror("Unable to open LICENSE.nodict.fodt.zck for reading"); + exit(1); + } + + zckCtx *src_zck = zck_create(); + if(src_zck == NULL) + exit(1); + if(!zck_init_read(src_zck, src)) { + printf("%s", zck_get_error(src_zck)); + exit(1); + } + + if(!zck_read_lead(tgt_zck) || !zck_read_header(tgt_zck)) { + printf("%s", zck_get_error(tgt_zck)); + exit(1); + } + if(zck_find_valid_chunks(tgt_zck) > 0) { + printf("All chunks were valid, but the target shouldn't have any " + "chunks\n"); + exit(1); + } + int out = zck_copy_chunks(src_zck, tgt_zck); + if(!out) { + printf("%i: %s%s\n", out, zck_get_error(src_zck), zck_get_error(tgt_zck)); + exit(1); + } + zck_reset_failed_chunks(tgt_zck); + printf("Missing chunks: %i\n", zck_missing_chunks(tgt_zck)); + if(zck_missing_chunks(tgt_zck) != 1) { + printf("Should be only one chunk missing"); + exit(1); + } + + if(zck_close(tgt_zck)) { + printf("Should have run into an error closing " + "LICENSE.header.new.nodict.fodt.zck"); + exit(1); + } + + zck_free(&tgt_zck); + zck_free(&src_zck); + free(path); + return 0; +} diff --git a/test/empty.c b/test/empty.c new file mode 100644 index 0000000..92bf2ae --- /dev/null +++ b/test/empty.c @@ -0,0 +1,111 @@ +/* + * Copyright 2018 Jonathan Dieter + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions are met: + * + * 1. Redistributions of source code must retain the above copyright notice, + * this list of conditions and the following disclaimer. + * + * 2. Redistributions in binary form must reproduce the above copyright notice, + * this list of conditions and the following disclaimer in the documentation + * and/or other materials provided with the distribution. + * + * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" + * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE + * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE + * ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE + * LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR + * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF + * SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS + * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN + * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) + * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE + * POSSIBILITY OF SUCH DAMAGE. + */ + +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include "zck_private.h" +#include "util.h" + +static char *checksum="8efaeb8e7b3d51a943353f7e6ca4a22266f18c3ef10478b20d50040f4226015d"; + +int main (int argc, char *argv[]) { + /* Create empty zchunk file */ + int out = open("empty.zck", O_WRONLY | O_CREAT | O_TRUNC, 0666); + if(out < 0) { + perror("Unable to open empty.zck for writing"); + exit(1); + } + zckCtx *zck = zck_create(); + if(zck == NULL) + exit(1); + if(!zck_init_write(zck, out)) { + printf("%s", zck_get_error(zck)); + exit(1); + } + + if(!zck_close(zck)) + exit(1); + close(out); + zck_free(&zck); + + /* Open zchunk file and check that checksum matches */ + int in = open("empty.zck", O_RDONLY); + if(in < 0) { + perror("Unable to open empty.zck for reading"); + exit(1); + } + /* File should be 101 bytes, but we'll go a bit over */ + char *data = zmalloc(1000); + if(data == NULL) { + perror("Unable to allocate 1000 bytes"); + exit(1); + } + ssize_t len = read(in, data, 1000); + if(len < 0) { + perror("Unable to read from empty.zck"); + exit(1); + } + char *cksum = get_hash(data, len, ZCK_HASH_SHA256); + printf("empty.zck: (SHA-256)%s\n", cksum); + if(memcmp(cksum, checksum, strlen(cksum)) != 0) { + printf("Expected checksum: (SHA-256)%s\n", checksum); + exit(1); + } + free(cksum); + + /* Go back to beginning of file and read data from it */ + if(lseek(in, 0, SEEK_SET) != 0) { + perror("Unable to seek to beginning of empty.zck"); + exit(1); + } + zck = zck_create(); + if(zck == NULL) + exit(1); + if(!zck_init_read(zck, in)) { + printf("%s", zck_get_error(zck)); + exit(1); + } + memset(data, 0, 1000); + len = zck_read(zck, data, 1000); + if(len > 0) { + printf("%li bytes read, but file should be empty\n", (long)len); + exit(1); + } + if(!zck_close(zck)) + exit(1); + + zck_free(&zck); + free(data); + return 0; +} diff --git a/test/files/LICENSE.dict b/test/files/LICENSE.dict new file mode 100644 index 0000000000000000000000000000000000000000..44df944ec0f253116ec45992e47f788d63120559 GIT binary patch literal 4096 zcma)9OOGR074AufhoZm)B%}bFqatc`3)|iHJTmE?ws70k?qb}wQ&sM!vmlhKuI)?L z!_=camRPVsAcYOe1}PE}FepC&3BoR7LAF6iNG#Z7!3G2yBo;`B?>_8yXFMZDnszw!e?)NaMO9`s~b1J z)w%W7C*JzxFMs!w;}<{m+;HoMe|^cg@$$`$jhi<<|NLiO?|$KPaPY6*(c|CtU%B-Q z`u)p?ou7U2hVUx>VBN;2@!v}WqwY?4M$?5;(cNqwo|%fX@+~MEgWcTB|PoDVd5* z+lX>bp@)DL`zrMD^Ijb*ARfygCdm}1n7|m$HREAOLqB zvxaRqy6*WtR_2ogZ`mbl99kXAJ;#C;9a(PIbR0VB+0>wZ!*;FapwqCaKd}2f$E1dB zQp<9horZN{wkl+GsoNv-)a<(C95*^0a*s`F_WI|x)joFVxYuc!Ho;u8*L7{{aNzcA zhYn5ZSdGJusXQUHmSvkww*-S%S52!0yNynXoW9w##D)0{^Q4b}&P&>+W4=DXBD|zl zf62Mz&1}r%)KLW28WJoxdYdvcCXiR zgki_DPpziu>{F+QbYRuMF-!2^Hl$;iK&tQ>YYzvGC6i`#UDLJ)eb?%Bw{h|_qy^`0 zU~5Zex7U?bK!$quxiBhnAd_FBvttv_ZIMu!sfI{~gN!vr@XKZJhXlGSXQZy#?pSTJ z+cZTqJz?d{a?EYi%0gsqVNw+zK9LUi6*WRs>e6z^=^eS~4V+L^lB^?Yv`(%1gPc9e z_d*`C@-SuI#g2ZGO#w3bF3aa3E5}~M4h$zxlX(1QZTC$xnohioXGXnNd9b4vVoROQ z0no^sFOVqP-%qA@7lQiP-m^_*#=>-kF z4A8_H0c*XzB%m)W&*jAxd?+jYi3)@J614D~Dno0?!C}61UnOstT(Xkjpi3UWpG2PE z9WTrhiWmdi0E3E9z#D!N2VCsU_DH8?3>}h6UOQtcl2R4q0|IMwXXlOl9O_%1|PfsX$cGR~G0-DWV}uS7Mz$d44BH%_Q45 zQMZ(jCpm33x2d+fdw&OiUZXNKQLAoJ%(68peWuAi=$>bilp!DBXa+8an#4H^N=i;p zI)CD&V^ld$Bq`%$ndrS??(tZ4oN8L38ZfgEAlYMHmL)z1jRzDYei5-am;I%ZN?W2k zH@{OP`TjyV)ZMmp7cfYVX70EbuX`H1^1p&pXB*;Z)ayVn^n9Z z8M2C>L_4~4Vpm;XdzxRKjf&grQE}U-J5$6gQWB^vfk3q7Yxvly->vAF*ECDNdKUn* z)I@M5m_?-;+~n!XK~NwLs&2A@WpU+<;H9}Dsq8AJK);|Y7C*yj$^@NxIr>H*-v#j+ zIvZj}%3e{}sNE;3wsz4zzdJ@d8{CJcm(Hbo2% zMVvTCE1AVWHN!k>GoM2O<2+kLz1p>sOL@*B#lcV4kN*Ap>j8qUR-&_}q5A9kPtpC; z_f)HQgc6DBh@%Ld26M(^q2hYlUWzNoLe%K&c2iwyY)c*$BLb#ajXOQ+qWDmm zpz!lO>Pj6E>8{WKDyzNY=Q<%{&lq~0##cl8wSgZKzMSrd44t#LrnFB{FjZ+S$JJe( z@6};QMTjB`G&}QXn1q=@N;l&oDrd!L#2+0PmDPue0uGF-p@sGtI;%rik>DhggGL$h zS(fTu#s?4Pve3iv%3jFFu}~vzn;tx2{9_BX2f15eiv{K390uVu_lEk^GDWy8XL&L$ zPjwU+J}R%?<*@-+?ukN`Ilj5#{J<#hR%(kEK+TxPm?1`ZAvfq*^02_%kzdQ51lLeL zFAIS_Fh2U;&;Rd4se}v#%OWLrDz#eej)+cL#TZ#uhoA8vpBxywmFjEvM35Q+PZ?)a zG%MqbM~|RC7kl}93NIOtrXe%*vk4$}V0`6nMSNv;Se9WDd&EgSwQvI%;{noUY sg`owVEwd!N>Lr&PeSk`>cH^mfCi1zut0Q*Rzg|ROgoHZneuqx~2auLvIRF3v literal 0 HcmV?d00001 diff --git a/test/files/LICENSE.dict.fodt.zck b/test/files/LICENSE.dict.fodt.zck new file mode 100644 index 0000000000000000000000000000000000000000..d82fc4cbfdb1495bc13b0f9a1e81cfac8de66f52 GIT binary patch literal 125874 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 bd=($<;TrNlf51(A18LW=LiFV|ahX5^6gta{ literal 0 HcmV?d00001 diff --git a/test/files/LICENSE.fodt b/test/files/LICENSE.fodt new file mode 100644 index 0000000..1aa5c89 --- /dev/null +++ b/test/files/LICENSE.fodt @@ -0,0 +1,6704 @@ + + + + 2011-05-11T11:39:17.792017-10-28T02:09:56.742348786P6DT2H22M34S256LibreOffice/5.3.5.2$Linux_X86_64 LibreOffice_project/30m0$Build-2LicenseGPLLGPLMPLApacheCCLibreOffice Licensing and Legal informationLicensing and Legal information + + + 639233 + 0 + 40748 + 17041 + true + false + + + view2 + 11873 + 644324 + 0 + 639233 + 40746 + 656273 + 0 + 1 + false + 100 + false + false + + + + + false + true + true + true + true + 0 + true + + false + false + false + false + false + false + false + false + false + false + false + false + true + false + true + true + 886442 + false + false + false + false + + false + false + true + false + false + + false + false + false + false + true + 4646547 + false + true + true + false + true + true + false + true + 0 + false + true + high-resolution + false + false + false + false + false + false + 1 + true + false + true + true + true + + true + false + false + true + false + false + false + + false + false + false + 0 + false + false + + + false + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + Licensing and Legal information + This product is made available subject to the terms of the Mozilla Public License, v. 2.0. A copy of the MPL Version 2 license can be found below. + Jump to MPL Version 2 + Third Party Code Additional copyright notices and license terms applicable to portions of the Software can be found below in this document. + All trademarks and registered trademarks mentioned herein are the property of their respective owners. + Copyright © 2000, 2017 LibreOffice contributors. All rights reserved. + This product is based on OpenOffice.org. Portions of this software are copyright © 2000-2011, Oracle and/or its affiliates. + This product has been created by The Document Foundation, incorporating many modifications from different contributors, see http://www.libreoffice.org/ for more details. + Note: Do not translate or localize this document. Only English version is legally binding. + + + Contents + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + Contents + + Libraries + Extensions + Fonts + Dictionaries + Artwork + Miscellaneous + GNU Lesser General Public License Version 3 + GNU Lesser General Public License Version 2.1 + GNU Library General Public License Version 2 + GNU General Public License Version 3 + GNU General Public License Version 2 + Mozilla Public License Version 1.1 + Mozilla Public License Version 2.0 + SIL Open Font License Version 1.1 – 26 February 2007 + Apache License + The LaTeX Project Public License + Creative Commons Attribution-ShareAlike 3.0 Unported + + + + Third Party Code Additional Copyright Notices and License Terms + Libraries + Apache Commons + The following software may be included in this product: Apache Commons (codec, httpclient, lang, logging). Use of any of this software is governed by the terms of the license below: + Jump to Apache License Version 2.0 + beanshell + The following software may be included in this product: beanshell. Use of any of this software is governed by the terms of the license below: + Jump to Apache License Version 2.0 + C++ Boost Library + The following software may be included in this product: C++ Boost Library. Use of any of this software is governed by the terms of the license below: + Boost Software License - Version 1.0 - August 17th, 2003 + Permission is hereby granted, free of charge, to any person or organization obtaining a copy of the software and accompanying documentation covered by this license (the "Software") to use, reproduce, display, distribute, execute, and transmit the Software, and to prepare derivative works of the Software, and to permit third-parties to whom the Software is furnished to do so, all subject to the following: + The copyright notices in the Software and this entire statement, including the above license grant, this restriction and the following disclaimer, must be included in all copies of the Software, in whole or in part, and all derivative works of the Software, unless such copies or derivative works are solely in the form of machine-executable object code generated by a source language processor. + THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE, TITLE AND NON-INFRINGEMENT. IN NO EVENT SHALL THE COPYRIGHT HOLDERS OR ANYONE DISTRIBUTING THE SOFTWARE BE LIABLE FOR ANY DAMAGES OR OTHER LIABILITY, WHETHER IN CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. + Cairo + The following software may be included in this product: Cairo. Use of any of this software is governed by the terms of the license below: + Cairo is free software. + Every source file in the implementation[*] of cairo is available to be redistributed and/or modified under the terms of either the GNU Lesser General Public License (LGPL) version 2.1 or the Mozilla Public License (MPL) version 1.1. Some files are available under more liberal terms, but we believe that in all cases, each file may be used under either the LGPL or the MPL. + See the following files in this directory for the precise terms and conditions of either license: + Jump to LGPL Version 2.1 + Jump to MPL Version 1.1 + Please see each file in the implementation for copyright and licensing information, (in the opening comment of each file). + [*] The implementation of cairo is contained entirely within the "src" and "pixman" directories of the cairo source distribution. There are other components of the cairo source distribution (such as the "test" and "perf") that are auxiliary to the library itself. None of the source code in these directories contributes to a build of the cairo library itself, (libcairo.so or cairo.dll or similar). + These auxiliary components are also free software, but may be under different license terms than cairo itself. For example, most of the test cases in the perf and test directories are made available under a MIT license to simplify any use of this code for reference purposes in using cairo itself. Other files might be available under the GNU General Public License (GPL), for example. Again, please see the opening comment of each file for copyright and licensing information. + CLucene + The following software may be included in this product: CLucene. Use of any of this software is governed by the terms of the license below: + CLucene is distributed under the GNU Lesser General Public License (LGPL) or the Apache License, Version 2.0 + Jump to LGPL Version 2.1 + Jump to Apache License Version 2.0 + expat XML Parser Toolkit + The following software may be included in this product: expat XML Parser Toolkit. Use of any of this software is governed by the terms of the license below: + Copyright (c) 1998, 1999, 2000 Thai Open Source Software Center Ltd and Clark Cooper + Copyright (c) 2001, 2002, 2003 Expat maintainers. + Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the "Software"), to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions: + The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software. + THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. + Flute + The following software may be included in this product: Flute. Use of any of this software is governed by the terms of the license below: + W3C IPR SOFTWARE NOTICE + Copyright © 2002 World Wide Web Consortium, (Massachusetts Institute of Technology, Institut National de Recherche en Informatique et en Automatique, Keio University). All Rights Reserved. + Note: The original version of the W3C Software Copyright Notice and License could be found at http://www.w3.org/Consortium/Legal/copyright-software-19980720 + Copyright © 1994-2000 World Wide Web Consortium, (Massachusetts Institute of Technology, Institut National de Recherche en Informatique et en Automatique, Keio University). All Rights Reserved. http://www.w3.org/Consortium/Legal/ + This W3C work (including software, documents, or other related items) is being provided by the copyright holders under the following license. By obtaining, using and/or copying this work, you (the licensee) agree that you have read, understood, and will comply with the following terms and conditions: + Permission to use, copy, and modify this software and its documentation, with or without modification, for any purpose and without fee or royalty is hereby granted, provided that you include the following on ALL copies of the software and documentation or portions thereof, including modifications, that you make: + + + The full text of this NOTICE in a location viewable to users of the redistributed or derivative work. + + + Any pre-existing intellectual property disclaimers, notices, or terms and conditions. If none exist, a short notice of the following form (hypertext is preferred, text is permitted) should be used within the body of any redistributed or derivative code: "Copyright © 2002 World Wide Web Consortium, (Massachusetts Institute of Technology, Institut National de Recherche en Informatique et en Automatique, Keio University). All Rights Reserved. http://www.w3.org/Consortium/Legal/" + + + Notice of any changes or modifications to the W3C files, including the date changes were made. (We recommend you provide URIs to the location from which the code is derived.) + + + THIS SOFTWARE AND DOCUMENTATION IS PROVIDED "AS IS," AND COPYRIGHT HOLDERS MAKE NO REPRESENTATIONS OR WARRANTIES, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO, WARRANTIES OF MERCHANTABILITY OR FITNESS FOR ANY PARTICULAR PURPOSE OR THAT THE USE OF THE SOFTWARE OR DOCUMENTATION WILL NOT INFRINGE ANY THIRD PARTY PATENTS, COPYRIGHTS, TRADEMARKS OR OTHER RIGHTS. + COPYRIGHT HOLDERS WILL NOT BE LIABLE FOR ANY DIRECT, INDIRECT, SPECIAL OR CONSEQUENTIAL DAMAGES ARISING OUT OF ANY USE OF THE SOFTWARE OR DOCUMENTATION. + The name and trademarks of copyright holders may NOT be used in advertising or publicity pertaining to the software without specific, written prior permission. Title to copyright in this software and any associated documentation will at all times remain with copyright holders. + Freetype Library + The following software may be included in this product: Freetype. Use of any of this software is governed by the terms of the license below: + 0. Definitions + Throughout this license, the terms `package', `FreeType Project', and `FreeType archive' refer to the set of files originally distributed by the authors (David Turner, Robert Wilhelm, and Werner Lemberg) as the `FreeType Project', be they named as alpha, beta or final release. + `You' refers to the licensee, or person using the project, where `using' is a generic term including compiling the project's source code as well as linking it to form a `program' or `executable'. This program is referred to as `a program using the FreeType engine'. + This license applies to all files distributed in the original FreeType Project, including all source code, binaries and documentation, unless otherwise stated in the file in its original, unmodified form as distributed in the original archive. If you are unsure whether or not a particular file is covered by this license, you must contact us to verify this. + The FreeType Project is copyright (C) 1996-2000 by David Turner, Robert Wilhelm, and Werner Lemberg. All rights reserved except as specified below. + 1. No Warranty + THE FREETYPE PROJECT IS PROVIDED `AS IS' WITHOUT WARRANTY OF ANY KIND, EITHER EXPRESS OR IMPLIED, INCLUDING, BUT NOT LIMITED TO, WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE. IN NO EVENT WILL ANY OF THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY DAMAGES CAUSED BY THE USE OR THE INABILITY TO USE, OF THE FREETYPE PROJECT. + 2. Redistribution + This license grants a worldwide, royalty-free, perpetual and irrevocable right and license to use, execute, perform, compile, display, copy, create derivative works of, distribute and sublicense the FreeType Project (in both source and object code forms) and derivative works thereof for any purpose; and to authorize others to exercise some or all of the rights granted herein, subject to the following conditions: + + + Redistribution of source code must retain this license file ('FTL.TXT') unaltered; any additions, deletions or changes to the original files must be clearly indicated in accompanying documentation. The copyright notices of the unaltered, original files must be preserved in all copies of source files. + + + Redistribution in binary form must provide a disclaimer that states that the software is based in part of the work of the FreeType Team, in the distribution documentation. We also encourage you to put an URL to the FreeType web page in your documentation, though this isn't mandatory. + + + These conditions apply to any software derived from or based on the FreeType Project, not just the unmodified files. If you use our work, you must acknowledge us. However, no fee need be paid to us. + 3. Advertising + Neither the FreeType authors and contributors nor you shall use the name of the other for commercial, advertising, or promotional purposes without specific prior written permission. + We suggest, but do not require, that you use one or more of the following phrases to refer to this software in your documentation or advertising materials: `FreeType Project', `FreeType Engine', `FreeType library', or `FreeType Distribution'. + As you have not signed this license, you are not required to accept it. However, as the FreeType Project is copyrighted material, only this license, or another one contracted with the authors, grants you the right to use, distribute, and modify it. Therefore, by using, distributing, or modifying the FreeType Project, you indicate that you understand and accept all the terms of this license. + 4. Contacts + There are two mailing lists related to FreeType: + + + freetype@freetype.org + + + Discusses general use and applications of FreeType, as well as future and wanted additions to the library and distribution. If you are looking for support, start in this list if you haven't found anything to help you in the documentation. + + + devel@freetype.org + + + Discusses bugs, as well as engine internals, design issues, specific licenses, porting, etc. + + + http://www.freetype.org + + + Holds the current FreeType web page, which will allow you to download our latest development version and read online documentation. + You can also contact us individually at: + David TurnerRobert WilhelmWerner Lemberg + GNU ISO C++ Library + The following software may be included in this product: GNU ISO C++ Library. Use of any of this software is governed by the terms of the license below: + © Free Software Foundation, Inc. + Jump to GPL Version 2 + Additional License(s) + + libstdc++: + // Explicit instantiation file. + + // Copyright (C) 1997, 1998, 1999, 2000, 2001, 2002 + // Free Software Foundation, Inc. + // + // This file is part of the GNU ISO C++ Library. This library is free + // software; you can redistribute it and/or modify it under the + // terms of the GNU General Public License as published by the + // Free Software Foundation; either version 2, or (at your option) + // any later version. + + // This library is distributed in the hope that it will be useful, + // but WITHOUT ANY WARRANTY; without even the implied warranty of + // MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + // GNU General Public License for more details. + + // You should have received a copy of the GNU General Public License along + // with this library; see the file COPYING. If not, write to the Free + // Software Foundation, 59 Temple Place - Suite 330, Boston, MA + 02111-1307, + // USA. + + // As a special exception, you may use this file as part of a free + software + // library without restriction. Specifically, if other files instantiate + // templates or use macros or inline functions from this file, or you + compile + // this file and link it with other files to produce an executable, this + // file does not by itself cause the resulting executable to be covered by + // the GNU General Public License. This exception does not however + // invalidate any other reasons why the executable file might be + covered by + // the GNU General Public License. + + libgcc: + // + // ISO C++ 14882: + // + + /* Copyright (C) 2001, 2002 Free Software Foundation, Inc. + Contributed by Jakub Jelinek . + + This file is part of GNU CC. + + GNU CC is free software; you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation; either version 2, or (at your option) + any later version. + + GNU CC is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with GNU CC; see the file COPYING. If not, write to + the Free Software Foundation, 59 Temple Place - Suite 330, + Boston, MA 02111-1307, USA. */ + + /* As a special exception, if you link this library with other files, + some of which are compiled with GCC, to produce an executable, + this library does not by itself cause the resulting executable + to be covered by the GNU General Public License. + This exception does not however invalidate any other reasons why + the executable file might be covered by the GNU General Public + License. */ + + /* Locate the FDE entry for a given address, using PT_GNU_EH_FRAME ELF + segment and dl_iterate_phdr to avoid register/deregister calls at + DSO load/unload. */ + Firebird + The applicable and approved licenses for the source files of the Firebird RDBMS project are: + 1) InterBase Public License (IPL), version 1.0 + 2) Initial Developer's Public License (IDPL), version 1.0 + The IPL is copyright of Borland Corp., the other licenses are copyright by the source code authors and contributors. Both are variants of the Mozilla Public License V.1.1 (MPL). See http://www.firebirdsql.org/en/licensing/ + fontconfig + The following software may be included in this product: fontconfig. Use of any of this software is governed by the terms of the license below: + Copyright © 2002 Keith Packard + Permission to use, copy, modify, distribute, and sell this software and its documentation for any purpose is hereby granted without fee, provided that the above copyright notice appear in all copies and that both that copyright notice and this permission notice appear in supporting documentation, and that the name of the author(s) not be used in advertising or publicity pertaining to distribution of the software without specific, written prior permission. The authors make no representations about the suitability of this software for any purpose. It is provided "as is" without express or implied warranty. + THE AUTHOR(S) DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE, INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS, IN NO EVENT SHALL THE AUTHOR(S) BE LIABLE FOR ANY SPECIAL, INDIRECT OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. + Graphite2 + The following software may be included in this product: Graphite2. Use of any of this software is governed by the terms of the license below: + Copyright 2010, SIL International All rights reserved. + This library is free software; you can redistribute it and/or modify it under the terms of the GNU Lesser General Public License as published by the Free Software Foundation; either version 2.1 of License, or (at your option) any later version. + This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU Lesser General Public License for more details. + You should also have received a copy of the GNU Lesser General Public License along with this library in the file named "LICENSE". If not, write to the Free Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307, USA or visit their web page on the internet at http://www.fsf.org/licenses/lgpl.html. + Alternatively, you may use this library under the terms of the Mozilla Public License (http://mozilla.org/MPL) or under the GNU General Public License, as published by the Free Software Foundation; either version 2 of the license or (at your option) any later version. + Jump to LGPL Version 2.1 + Jump to MPL Version 1.1 + HarfBuzz + HarfBuzz is licensed under the so-called "Old MIT" license. Details follow. For parts of HarfBuzz that are licensed under different licenses see individual files names COPYING in subdirectories where applicable. + Copyright © 2010,2011,2012 Google, Inc. Copyright © 2012 Mozilla Foundation Copyright © 2011 Codethink Limited Copyright © 2008,2010 Nokia Corporation and/or its subsidiary(-ies) Copyright © 2009 Keith Stribley Copyright © 2009 Martin Hosken and SIL International Copyright © 2007 Chris Wilson Copyright © 2006 Behdad Esfahbod Copyright © 2005 David Turner Copyright © 2004,2007,2008,2009,2010 Red Hat, Inc. Copyright © 1998-2004 David Turner and Werner Lemberg + For full copyright notices consult the individual files in the package. + Permission is hereby granted, without written agreement and without license or royalty fees, to use, copy, modify, and distribute this software and its documentation for any purpose, provided that the above copyright notice and the following two paragraphs appear in all copies of this software. + IN NO EVENT SHALL THE COPYRIGHT HOLDER BE LIABLE TO ANY PARTY FOR DIRECT, INDIRECT, SPECIAL, INCIDENTAL, OR CONSEQUENTIAL DAMAGES ARISING OUT OF THE USE OF THIS SOFTWARE AND ITS DOCUMENTATION, EVEN IF THE COPYRIGHT HOLDER HAS BEEN ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + THE COPYRIGHT HOLDER SPECIFICALLY DISCLAIMS ANY WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE. THE SOFTWARE PROVIDED HEREUNDER IS ON AN "AS IS" BASIS, AND THE COPYRIGHT HOLDER HAS NO OBLIGATION TO PROVIDE MAINTENANCE, SUPPORT, UPDATES, ENHANCEMENTS, OR MODIFICATIONS. + HSQLDB + The following software may be included in this product: HSQLDB. Use of any of this software is governed by the terms of the license below: + ORIGINAL LICENSE (a.k.a. "hypersonic_lic.txt") + For content, code, and products originally developed by Thomas Mueller and the Hypersonic SQL Group: + Copyright (c) 1995-2000 by the Hypersonic SQL Group. All rights reserved. Redistribution and use in source and binary forms, with or without modification, are permitted provided that the following conditions are met: + Redistribution of source code must retain the above copyright notice, this list of conditions and the following disclaimer. + Redistribution in binary form must reproduce the above copyright notice, this list of conditions and the following disclaimer in the documentation and/or other materials provided with the distribution. + Neither the name of the Hypersonic SQL Group nor the names of its contributors may be used to endorse or promote products derived from this software without specific prior written permission. + THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE HYPERSONIC SQL GROUP, OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. This software consists of voluntary contributions made by many individuals on behalf of the Hypersonic SQL Group. + For work added by the HSQL Development Group (a.k.a. hsqldb_lic.txt) + Copyright (c) 2001-2004, The HSQL Development Group All rights reserved. + Redistribution and use in source and binary forms, with or without modification, are permitted provided that the following conditions are met: + Redistribution of source code must retain the above copyright notice, this list of conditions and the following disclaimer. + Redistribution in binary form must reproduce the above copyright notice, this list of conditions and the following disclaimer in the documentation and/or other materials provided with the distribution. + Neither the name of the HSQL Development Group nor the names of its contributors may be used to endorse or promote products derived from this software without specific prior written permission. + THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL HSQL DEVELOPMENT GROUP, HSQLDB.ORG, OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + Hunspell + The following software may be included in this product: Hunspell. Use of any of this software is governed by the terms of the license below: + GPL 2.0/LGPL 2.1/MPL 1.1 tri-license + The contents of this software may be used under the terms of the GNU General Public License Version 2 or later (the "GPL"), or the GNU Lesser General Public License Version 2.1 or later (the "LGPL") or (excepting the LGPLed GNU gettext library in the intl/ directory) the Mozilla Public License Version 1.1 or later (the "MPL"). + Software distributed under these licenses is distributed on an "AS IS" basis, WITHOUT WARRANTY OF ANY KIND, either express or implied. See the licenses for the specific language governing rights and limitations under the licenses. + Jump to GPL Version 2 + Jump to LGPL Version 2.1 + Jump to MPL Version 1.1 + Hyphen + The following software may be included in this product: Hyphen. Use of any of this software is governed by the terms of the license below: + GPL 2.0/LGPL 2.1/MPL 1.1 tri-license + The contents of this software may be used under the terms of the GNU General Public License Version 2 or later (the "GPL"), or the GNU Lesser General Public License Version 2.1 or later (the "LGPL") or (excepting the LGPLed GNU gettext library in the intl/ directory) the Mozilla Public License Version 1.1 or later (the "MPL"). + The Plain TeX hyphenation tables "hyphen.tex" by Donald E. Knuth has a non MPL/LGPL compatible license, but freely redistributable: "Unlimited copying and redistribution of this file are permitted as long as this file is not modified. Modifications are permitted, but only if the resulting file is not named hyphen.tex." + Software distributed under these licenses is distributed on an "AS IS" basis, WITHOUT WARRANTY OF ANY KIND, either express or implied. See the licenses for the specific language governing rights and limitations under the licenses. + Jump to GPL Version 2 + Jump to LGPL Version 2.1 + Jump to MPL Version 1.1 + IAccessible2 + The following software may be included in this product: IAccessible2 API. + IAccessible2 IDL Specification + Copyright (c) 2007, 2013 Linux FoundationCopyright (c) 2006 IBM CorporationCopyright (c) 2000, 2006 Sun Microsystems, Inc.All rights reserved. + Redistribution and use in source and binary forms, with or without modification, are permitted provided that the following conditions are met: + + + Redistributions of source code must retain the above copyright notice, this list of conditions and the following disclaimer. + + + + + Redistributions in binary form must reproduce the above copyright notice, this list of conditions and the following disclaimer in the documentation and/or other materials provided with the distribution. + + + + + Neither the name of the Linux Foundation nor the names of its contributors may be used to endorse or promote products derived from this software without specific prior written permission. + + + THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + This BSD License conforms to the Open Source Initiative "Simplified BSD License" as published at: http://www.opensource.org/licenses/bsd-license.php + IAccessible2 is a trademark of the Linux Foundation. The IAccessible2 mark may be used in accordance with the Linux Foundation Trademark Policy to indicate compliance with the IAccessible2 specification. + Find out more about IAccessible2 at http://accessibility.linuxfoundation.org/. + ICU + The following software may be included in this product: ICU. Use of any of this software is governed by the terms of the license below: + ICU License - ICU 1.8.1 and later + COPYRIGHT AND PERMISSION NOTICE + Copyright (c) 1995-2002 International Business Machines Corporation and others All rights reserved. + Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the "Software"), to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, provided that the above copyright notice(s) and this permission notice appear in all copies of the Software and that both the above copyright notice(s) and this permission notice appear in supporting documentation. + THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT OF THIRD PARTY RIGHTS. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR HOLDERS INCLUDED IN THIS NOTICE BE LIABLE FOR ANY CLAIM, OR ANY SPECIAL INDIRECT OR CONSEQUENTIAL DAMAGES, OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. + Except as contained in this notice, the name of a copyright holder shall not be used in advertising or otherwise to promote the sale, use or other dealings in this Software without prior written authorization of the copyright holder. + All trademarks and registered trademarks mentioned herein are the property of their respective owners. + IJG JPEG Library + The following software may be included in this product: IJG JPEG Library. Use of any of this software is governed by the terms of the license below: + In plain English: + + + We don't promise that this software works. (But if you find any bugs, please let us know!) + + + You can use this software for whatever you want. You don't have to pay us. + + + You may not pretend that you wrote this software. If you use it in a program, you must acknowledge somewhere in your documentation that you've used the IJG code. + + + In legalese: + The authors make NO WARRANTY or representation, either express or implied, with respect to this software, its quality, accuracy, merchantability, or fitness for a particular purpose. This software is provided "AS IS", and you, its user, assume the entire risk as to its quality and accuracy. + This software is copyright (C) 1991-1998, Thomas G. Lane. All Rights Reserved except as specified below. + Permission is hereby granted to use, copy, modify, and distribute this software (or portions thereof) for any purpose, without fee, subject to these conditions: (1) If any part of the source code for this software is distributed, then this README file must be included, with this copyright and no-warranty notice unaltered; and any additions, deletions, or changes to the original files must be clearly indicated in accompanying documentation. (2) If only executable code is distributed, then the accompanying documentation must state that "this software is based in part on the work of the Independent JPEG Group". (3) Permission for use of this software is granted only if the user accepts full responsibility for any undesirable consequences; the authors accept NO LIABILITY for damages of any kind. + These conditions apply to any software derived from or based on the IJG code, not just to the unmodified library. If you use our work, you ought to acknowledge us. + Permission is NOT granted for the use of any IJG author's name or company name in advertising or publicity relating to this software or products derived from it. This software may be referred to only as "the Independent JPEG Group's software". + We specifically permit and encourage the use of this software as the basis of commercial products, provided that all warranty or liability claims are assumed by the product vendor. + ansi2knr.c is included in this distribution by permission of L. Peter Deutsch, sole proprietor of its copyright holder, Aladdin Enterprises of Menlo Park, CA. ansi2knr.c is NOT covered by the above copyright and conditions, but instead by the usual distribution terms of the Free Software Foundation; principally, that you must include source code if you redistribute it. (See the file ansi2knr.c for full details.) However, since ansi2knr.c is not needed as part of any program generated from the IJG code, this does not limit you more than the foregoing paragraphs do. + The Unix configuration script "configure" was produced with GNU Autoconf. It is copyright by the Free Software Foundation but is freely distributable. The same holds for its supporting scripts (config.guess, config.sub, ltconfig, ltmain.sh). Another support script, install-sh, is copyright by M.I.T. but is also freely distributable. + It appears that the arithmetic coding option of the JPEG spec is covered by patents owned by IBM, AT&T, and Mitsubishi. Hence arithmetic coding cannot legally be used without obtaining one or more licenses. For this reason, support for arithmetic coding has been removed from the free JPEG software. (Since arithmetic coding provides only a marginal gain over the unpatented Huffman mode, it is unlikely that very many implementations will support it.) So far as we are aware, there are no patent restrictions on the remaining code. + The IJG distribution formerly included code to read and write GIF files. To avoid entanglement with the Unisys LZW patent, GIF reading support has been removed altogether, and the GIF writer has been simplified to produce "uncompressed GIFs". This technique does not use the LZW algorithm; the resulting GIF files are larger than usual, but are readable by all standard GIF decoders. + We are required to state that + "The Graphics Interchange Format(c) is the Copyright property of CompuServe Incorporated. GIF(sm) is a Service Mark property of CompuServe Incorporated." + JDOM + The following software may be included in this product: JDOM. Use of any of this software is governed by the terms of the license below: + Copyright (C) 2000-2004 Jason Hunter & Brett McLaughlin. All rights reserved. + Redistribution and use in source and binary forms, with or without modification, are permitted provided that the following conditions are met: + 1. Redistribution of source code must retain the above copyright notice, this list of conditions, and the following disclaimer. + 2. Redistribution in binary form must reproduce the above copyright notice, this list of conditions, and the disclaimer that follows these conditions in the documentation and/or other materials provided with the distribution. + 3. The name "JDOM" must not be used to endorse or promote products derived from this software without prior written permission. For written permission, please contact <request_AT_jdom_DOT_org>. + 4. Products derived from this software may not be called "JDOM", nor may "JDOM" appear in their name, without prior written permission from the JDOM Project Management <request_AT_jdom_DOT_org>. + In addition, we request (but do not require) that you include in the end-user documentation provided with the redistribution and/or in the software itself an acknowledgement equivalent to the following: + "This product includes software developed by the JDOM Project (http://www.jdom.org/)." + Alternatively, the acknowledgment may be graphical using the logos available at http://www.jdom.org/images/logos. + THIS SOFTWARE IS PROVIDED ``AS IS'' AND ANY EXPRESSED OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE JDOM AUTHORS OR THE PROJECT CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + This software consists of voluntary contributions made by many individuals on behalf of the JDOM Project and was originally created by Jason Hunter <jhunter_AT_jdom_DOT_org> and Brett McLaughlin <brett_AT_jdom_DOT_org>. For more information on the JDOM Project, please see http://www.jdom.org/. + libatomic-ops + The following software may be included in this product: libatomic-ops. Use of any of this software is governed by the terms of the license below: + Jump to GPL Version 2 + libcdr + The following software may be included in this product: libcdr. Use of any of this software is governed by the terms of the license below: + MPL 1.1 / LGPL v2+ / GPL v2+ + Jump to GPL Version 2 + Jump to LGPL Version 2 + Jump to MPL Version 1.1 + libcmis + The following software may be included in this product: libcmis. Use of any of this software is governed by the terms of the license below: + MPL 1.1 / LGPL v2+ / GPL v2+ + Jump to GPL Version 2 + Jump to LGPL Version 2 + Jump to MPL Version 1.1 + libcurl + The following software may be included in this product: libcurl. Use of any of this software is governed by the terms of the license below: + Copyright (c) 1996 - 2009, Daniel Stenberg, <daniel@haxx.se>. + All rights reserved. + Permission to use, copy, modify, and distribute this software for any purpose with or without fee is hereby granted, provided that the above copyright notice and this permission notice appear in all copies. + THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT OF THIRD PARTY RIGHTS. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. + Except as contained in this notice, the name of a copyright holder shall not be used in advertising or otherwise to promote the sale, use or other dealings in this Software without prior written authorization of the copyright holder. + libeot + The following software may be included in this product: libeot. Use of any of this software is governed by the terms of the license below: + Jump to MPL Version 2 + libe-book + The following software may be included in this product: libe-book. Use of any of this software is governed by the terms of the license below: + LGPL v2.1+ / MPL 2+ + Jump to LGPL Version 2.1 + Jump to MPL Version 2 + libetonyek + The following software may be included in this product: libetonyek. Use of any of this software is governed by the terms of the license below: + Jump to MPL Version 2 + libexttextcat + The following software may be included in this product: libexttextcat. Use of any of this software is governed by the terms of the license below: + Copyright (c) 2003, WiseGuys Internet B.V. + All rights reserved. + Redistribution and use in source and binary forms, with or without modification, are permitted provided that the following conditions are met: + - Redistribution of source code must retain the above copyright notice, this list of conditions and the following disclaimer. + - Redistribution in binary form must reproduce the above copyright notice, this list of conditions and the following disclaimer in the documentation and/or other materials provided with the distribution. + - Neither the name of the WiseGuys Internet B.V. nor the names of its contributors may be used to endorse or promote products derived from this software without specific prior written permission. + THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + libfreehand + The following software may be included in this product: libfreehand. Use of any of this software is governed by the terms of the license below: + Jump to MPL Version 2 + liblangtag + The following software may be included in this product: liblangtag. Use of any of this software is governed by the terms of the license below: + Jump to LGPL Version 3 + libmspub + The following software may be included in this product: libmspub. Use of any of this software is governed by the terms of the license below: + MPL 1.1 / LGPL v2+ / GPL v2+ + Jump to GPL Version 2 + Jump to LGPL Version 2 + Jump to MPL Version 1.1 + libmwaw + The following software may be included in this product: libmwaw. Use of any of this software is governed by the terms of the license below: + LGPL v2.1+ / MPL 2 + Jump to LGPL Version 2.1 + Jump to MPL Version 2 + libodfgen + The following software may be included in this product: libodfgen. Use of any of this software is governed by the terms of the license below: + LGPL v2.1+ / MPL 2 + Jump to LGPL Version 2.1 + Jump to MPL Version 2 + liborcus + The following software may be included in this product: liborcus. Use of any of this software is governed by the terms of the license below: + Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the "Software"), to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions: + The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software. + THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. + libpng + The following software may be included in this product: libpng. Use of any of this software is governed by the terms of the license below: + This copy of the libpng notices is provided for your convenience. In case ofany discrepancy between this copy and the notices in the file png.h that isincluded in the libpng distribution, the latter shall prevail.COPYRIGHT NOTICE, DISCLAIMER, and LICENSE:If you modify libpng you may insert additional notices immediately followingthis sentence.This code is released under the libpng license.libpng versions 1.2.6, August 15, 2004, through 1.5.1, February 3, 2011, areCopyright (c) 2004, 2006-2011 Glenn Randers-Pehrson, and aredistributed according to the same disclaimer and license as libpng-1.2.5with the following individual added to the list of Contributing Authors Cosmin Trutalibpng versions 1.0.7, July 1, 2000, through 1.2.5 - October 3, 2002, areCopyright (c) 2000-2002 Glenn Randers-Pehrson, and aredistributed according to the same disclaimer and license as libpng-1.0.6with the following individuals added to the list of Contributing Authors Simon-Pierre Cadieux Eric S. Raymond Gilles Vollantand with the following additions to the disclaimer: There is no warranty against interference with your enjoyment of the library or against infringement. There is no warranty that our efforts or the library will fulfill any of your particular purposes or needs. This library is provided with all faults, and the entire risk of satisfactory quality, performance, accuracy, and effort is with the user.libpng versions 0.97, January 1998, through 1.0.6, March 20, 2000, areCopyright (c) 1998, 1999 Glenn Randers-Pehrson, and aredistributed according to the same disclaimer and license as libpng-0.96,with the following individuals added to the list of Contributing Authors: Tom Lane Glenn Randers-Pehrson Willem van Schaiklibpng versions 0.89, June 1996, through 0.96, May 1997, areCopyright (c) 1996, 1997 Andreas DilgerDistributed according to the same disclaimer and license as libpng-0.88,with the following individuals added to the list of Contributing Authors: John Bowler Kevin Bracey Sam Bushell Magnus Holmgren Greg Roelofs Tom Tannerlibpng versions 0.5, May 1995, through 0.88, January 1996, areCopyright (c) 1995, 1996 Guy Eric Schalnat, Group 42, Inc.For the purposes of this copyright and license, "Contributing Authors"is defined as the following set of individuals: Andreas Dilger Dave Martindale Guy Eric Schalnat Paul Schmidt Tim WegnerThe PNG Reference Library is supplied "AS IS". The Contributing Authorsand Group 42, Inc. disclaim all warranties, expressed or implied,including, without limitation, the warranties of merchantability and offitness for any purpose. The Contributing Authors and Group 42, Inc.assume no liability for direct, indirect, incidental, special, exemplary,or consequential damages, which may result from the use of the PNGReference Library, even if advised of the possibility of such damage.Permission is hereby granted to use, copy, modify, and distribute thissource code, or portions hereof, for any purpose, without fee, subjectto the following restrictions:1. The origin of this source code must not be misrepresented.2. Altered versions must be plainly marked as such and must not be misrepresented as being the original source.3. This Copyright notice may not be removed or altered from any source or altered source distribution.The Contributing Authors and Group 42, Inc. specifically permit, withoutfee, and encourage the use of this source code as a component tosupporting the PNG file format in commercial products. If you use thissource code in a product, acknowledgment is not required but would beappreciated.A "png_get_copyright" function is available, for convenient use in "about"boxes and the like: printf("%s",png_get_copyright(NULL));Also, the PNG logo (in PNG format, of course) is supplied in thefiles "pngbar.png" and "pngbar.jpg (88x31) and "pngnow.png" (98x31).Libpng is OSI Certified Open Source Software. OSI Certified Open Source is acertification mark of the Open Source Initiative.Glenn Randers-Pehrsonglennrp at users.sourceforge.netFebruary 3, 2011 + libvisio + The following software may be included in this product: libvisio. Use of any of this software is governed by the terms of the license below: + MPL 1.1+ / LGPL v2.1+ / GPL v2+ + Jump to GPL Version 2 + Jump to LGPL Version 2.1 + Jump to MPL Version 1.1 + libwpd + The following software may be included in this product: libwpd. Use of any of this software is governed by the terms of the license below: + LGPL v2.1+ / MPL 2 + Jump to LGPL Version 2.1 + Jump to MPL Version 2 + libwpg + The following software may be included in this product: libwpg. Use of any of this software is governed by the terms of the license below: + LGPL v2.1+ / MPL 2 + Jump to LGPL Version 2.1 + Jump to MPL Version 2 + libwps + The following software may be included in this product: libwps. Use of any of this software is governed by the terms of the license below: + LGPL v2.1+ / MPL 2 + Jump to LGPL Version 2.1 + Jump to MPL Version 2 + libxml2 + The following software may be included in this product: libxml2. Use of any of this software is governed by the terms of the license below: + Except where otherwise noted in the source code (e.g. the files hash.c, list.c and the trio files, which are covered by a similar license but with different Copyright notices) all the files are: + Copyright (C) 1998-2003 Daniel Veillard. All Rights Reserved. + Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the "Software"), to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions: + The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software. + THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FIT- NESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE DANIEL VEILLARD BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CON- NECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. + Except as contained in this notice, the name of Daniel Veillard shall not be used in advertising or otherwise to promote the sale, use or other dealings in this Software without prior written authorization from him. + libxslt + The following software may be included in this product: libxslt. Use of any of this software is governed by the terms of the license below: + License for libxslt except libexslt + Copyright (C) 2001-2002 Daniel Veillard. All Rights Reserved. + Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the "Software"), to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions: + The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software. + THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FIT- NESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE DANIEL VEILLARD BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CON- NECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. + Except as contained in this notice, the name of Daniel Veillard shall not be used in advertising or otherwise to promote the sale, use or other dealings in this Software without prior written authorization from him. + License for libexslt + Copyright (C) 2001-2002 Thomas Broyer, Charlie Bozeman and Daniel Veillard. All Rights Reserved. + Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the "Software"), to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions: + The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software. + THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FIT- NESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CON- NECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. + Except as contained in this notice, the name of the authors shall not be used in advertising or otherwise to promote the sale, use or other dealings in this Software without prior written authorization from him. + Little CMS (lcms2) + The following software may be included in this product: Little CMS (lcms2). Use of any of this software is governed by the terms of the license below: + Copyright (c) 1998-2011 Marti Maria Saguer + Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the "Software"), to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions: + The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software. + THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. + lpsolve + The following software may be included in this product: lpsolve. Use of any of this software is governed by the terms of the license below: + Jump to LGPL Version 2.1 + mdds + The following software may be included in this product: mdds. Use of any of this software is governed by the terms of the license below: + Copyright (c) 2010 Kohei Yoshida + Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the "Software"), to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions: + The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software. + THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. + Mesa + The following software may be included in this product: The Mesa 3D Graphics Library. The default Mesa license is as follows: + Copyright (C) 1999-2007 Brian Paul All Rights Reserved. + Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the "Software"), to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions: + The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software. + THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL BRIAN PAUL BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. + Ext headers + Copyright (c) 2007 The Khronos Group Inc. + Permission is hereby granted, free of charge, to any person obtaining a copy of this software and/or associated documentation files (the "Materials"), to deal in the Materials without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Materials, and to permit persons to whom the Materials are furnished to do so, subject to the following conditions: + The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Materials. + THE MATERIALS ARE PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE MATERIALS OR THE USE OR OTHER DEALINGS IN THE MATERIALS. + Microsoft Visual C++ 2010 Runtime Libraries + The following software may be included in this product: Microsoft Visual C++ 2010 Runtime Libraries. Use of any of this software is governed by the terms of the license below: + MICROSOFT SOFTWARE LICENSE TERMS + MICROSOFT VISUAL C++ 2010 RUNTIME LIBRARIES WITH SERVICE PACK 1 + These license terms are an agreement between Microsoft Corporation (or based on where you live, one of its affiliates) and you. Please read them. They apply to the software named above, which includes the media on which you received it, if any. The terms also apply to any Microsoft + + + updates, + + + supplements, + + + Internet-based services, and + + + support services + + + for this software, unless other terms accompany those items. If so, those terms apply. + BY USING THE SOFTWARE, YOU ACCEPT THESE TERMS. IF YOU DO NOT ACCEPT THEM, DO NOT USE THE SOFTWARE. + If you comply with these license terms, you have the rights below. + + + INSTALLATION AND USE RIGHTS. You may install and use any number of copies of the software on your devices. + + + SCOPE OF LICENSE. The software is licensed, not sold. This agreement only gives you some rights to use the software. Microsoft reserves all other rights. Unless applicable law gives you more rights despite this limitation, you may use the software only as expressly permitted in this agreement. In doing so, you must comply with any technical limitations in the software that only allow you to use it in certain ways. You may not + + + + + disclose the results of any benchmark tests of the software to any third party without Microsoft’s prior written approval; + + + work around any technical limitations in the software; + + + reverse engineer, decompile or disassemble the software, except and only to the extent that applicable law expressly permits, despite this limitation; + + + make more copies of the software than specified in this agreement or allowed by applicable law, despite this limitation; + + + publish the software for others to copy; + + + rent, lease or lend the software; + + + transfer the software or this agreement to any third party; or + + + use the software for commercial software hosting services. + + + + + BACKUP COPY. You may make one backup copy of the software. You may use it only to reinstall the software. + + + DOCUMENTATION. Any person that has valid access to your computer or internal network may copy and use the documentation for your internal, reference purposes. + + + EXPORT RESTRICTIONS. The software is subject to United States export laws and regulations. You must comply with all domestic and international export laws and regulations that apply to the software. These laws include restrictions on destinations, end users and end use. For additional information, see www.microsoft.com/exporting. + + + SUPPORT SERVICES. Because this software is “as is,” we may not provide support services for it. + + + ENTIRE AGREEMENT. This agreement, and the terms for supplements, updates, Internet-based services and support services that you use, are the entire agreement for the software and support services. + + + APPLICABLE LAW. + + + + + United States. If you acquired the software in the United States, Washington state law governs the interpretation of this agreement and applies to claims for breach of it, regardless of conflict of laws principles. The laws of the state where you live govern all other claims, including claims under state consumer protection laws, unfair competition laws, and in tort. + + + Outside the United States. If you acquired the software in any other country, the laws of that country apply. + + + + + LEGAL EFFECT. This agreement describes certain legal rights. You may have other rights under the laws of your country. You may also have rights with respect to the party from whom you acquired the software. This agreement does not change your rights under the laws of your country if the laws of your country do not permit it to do so. + + + DISCLAIMER OF WARRANTY. THE SOFTWARE IS LICENSED “AS-IS.” YOU BEAR THE RISK OF USING IT. MICROSOFT GIVES NO EXPRESS WARRANTIES, GUARANTEES OR CONDITIONS. YOU MAY HAVE ADDITIONAL CONSUMER RIGHTS UNDER YOUR LOCAL LAWS WHICH THIS AGREEMENT CANNOT CHANGE. TO THE EXTENT PERMITTED UNDER YOUR LOCAL LAWS, MICROSOFT EXCLUDES THE IMPLIED WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT. + + + LIMITATION ON AND EXCLUSION OF REMEDIES AND DAMAGES. YOU CAN RECOVER FROM MICROSOFT AND ITS SUPPLIERS ONLY DIRECT DAMAGES UP TO U.S. $5.00. YOU CANNOT RECOVER ANY OTHER DAMAGES, INCLUDING CONSEQUENTIAL, LOST PROFITS, SPECIAL, INDIRECT OR INCIDENTAL DAMAGES. + + + This limitation applies to + + + anything related to the software, services, content (including code) on third party Internet sites, or third party programs; and + + + claims for breach of contract, breach of warranty, guarantee or condition, strict liability, negligence, or other tort to the extent permitted by applicable law. + + + It also applies even if Microsoft knew or should have known about the possibility of the damages. The above limitation or exclusion may not apply to you because your country may not allow the exclusion or limitation of incidental, consequential or other damages. + Mozilla + The following software may be included in this product: Mozilla, Mozilla Address Book, NP SDK. Use of any of this software is governed by the terms of the license below: + Jump to MPL 1.1 + MySQL Connector/C++ + The following software may be included in this product:MySQL Connector/C++. Use of any of this software is governed by the terms of the license below: + Copyright 2007-2008 MySQL AB, 2008-2009 Sun Microsystems Inc. + Jump to GPL Version 2 + MyThes + The following software may be included in this product: MyThes. Use of any of this software is governed by the terms of the license below: + Copyright 2003 Kevin B. Hendricks, Stratford, Ontario, Canada And Contributors. All rights reserved. + Redistribution and use in source and binary forms, with or without modification, are permitted provided that the following conditions are met: + 1. Redistribution of source code must retain the above copyright notice, this list of conditions and the following disclaimer. + 2. Redistribution in binary form must reproduce the above copyright notice, this list of conditions and the following disclaimer in the documentation and/or other materials provided with the distribution. + 3. All modifications to the source code must be clearly marked as such. Binary redistribution based on modified source code must be clearly marked as modified versions in the documentation and/or other materials provided with the distribution. + THIS SOFTWARE IS PROVIDED BY KEVIN B. HENDRICKS AND CONTRIBUTORS ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL KEVIN B. HENDRICKS OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + neon + The following software may be included in this product: neon. Use of any of this software is governed by the terms of the license below: + neon is Copyright (C) 1999-2007 Joe Orton <joe@manyfish.co.uk>Portions are:Copyright (C) 1999-2000 Tommi Komulainen <Tommi.Komulainen@iki.fi>Copyright (C) 1999-2000 Peter Boos <pedib@colorfullife.com>Copyright (C) 1991, 1995, 1996, 1997 Free Software Foundation, Inc.Copyright (C) 2004 Aleix Conchillo Flaque <aleix@member.fsf.org>Copyright (C) 2004 Jiang Lei <tristone@deluxe.ocn.ne.jp>Copyright (C) 2004-2005 Vladimir Berezniker @ http://public.xdi.org/=vmpn + Jump to LGPL Version 2.1 + Network Security Services (NSS) + The following software may be included in this product: Network Security Services (NSS). Use of any of this software is governed by the terms of the license below: + Jump to MPL 1.1 + OpenLDAP + The following software may be included in this product: OpenLDAP. Use of any of this software is governed by the terms of the license below: + The OpenLDAP Public License + Version 2.8, 17 August 2003 + Redistribution and use of this software and associated documentation ("Software"), with or without modification, are permitted provided that the following conditions are met: + + + Redistributions in source form must retain copyright statements and notices, + + + Redistributions in binary form must reproduce applicable copyright statements and notices, this list of conditions, and the following disclaimer in the documentation and/or other materials provided with the distribution, and + + + Redistributions must contain a verbatim copy of this document. + + + The OpenLDAP Foundation may revise this license from time to time. Each revision is distinguished by a version number. You may use this Software under terms of this license revision or under the terms of any subsequent revision of the license. + THIS SOFTWARE IS PROVIDED BY THE OPENLDAP FOUNDATION AND ITS CONTRIBUTORS ``AS IS'' AND ANY EXPRESSED OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE OPENLDAP FOUNDATION, ITS CONTRIBUTORS, OR THE AUTHOR(S) OR OWNER(S) OF THE SOFTWARE BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + The names of the authors and copyright holders must not be used in advertising or otherwise to promote the sale, use or other dealing in this Software without specific, written prior permission. Title to copyright in this Software shall at all times remain with copyright holders. + OpenLDAP is a registered trademark of the OpenLDAP Foundation. + Copyright 1999-2003 The OpenLDAP Foundation, Redwood City, California, USA. All Rights Reserved. Permission to copy and distribute verbatim copies of this document is granted. + OpenSSL + The following software may be included in this product: OpenSSL. Use of any of this software is governed by the terms of the license below: + The OpenSSL toolkit stays under a dual license, i.e. both the conditions of the OpenSSL License and the original SSLeay license apply to the toolkit. + See below for the actual license texts. Actually both licenses are BSD-style Open Source licenses. In case of any license issues related to OpenSSL please contact openssl-core@openssl.org. + OpenSSL License + Copyright (c) 1998-2007 The OpenSSL Project. All rights reserved. + Redistribution and use in source and binary forms, with or without modification, are permitted provided that the following conditions are met: + + + Redistribution of source code must retain the above copyright notice, this list of conditions and the following disclaimer. + + + Redistribution in binary form must reproduce the above copyright notice, this list of conditions and the following disclaimer in the documentation and/or other materials provided with the distribution. + + + All advertising materials mentioning features or use of this software must display the following acknowledgment: "This product includes software developed by the OpenSSL Project for use in the OpenSSL Toolkit. (http://www.openssl.org/)" + + + The names "OpenSSL Toolkit" and "OpenSSL Project" must not be used to endorse or promote products derived from this software without prior written permission. For written permission, please contact openssl-core@openssl.org. + + + Products derived from this software may not be called "OpenSSL" nor may "OpenSSL" appear in their names without prior written permission of the OpenSSL Project. + + + Redistribution of any form whatsoever must retain the following acknowledgment: "This product includes software developed by the OpenSSL Project for use in the OpenSSL Toolkit (http://www.openssl.org/)" + + + THIS SOFTWARE IS PROVIDED BY THE OpenSSL PROJECT ``AS IS'' AND ANY EXPRESSED OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE OpenSSL PROJECT OR ITS CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + This product includes cryptographic software written by Eric Young (eay@cryptsoft.com). This product includes software written by Tim Hudson (tjh@cryptsoft.com). + Original SSLeay License + Copyright (C) 1995-1998 Eric Young (eay@cryptsoft.com) All rights reserved. + This package is an SSL implementation written by Eric Young (eay@cryptsoft.com).The implementation was written so as to conform with Netscapes SSL. + This library is free for commercial and non-commercial use as long as the following conditions are aheared to. The following conditions apply to all code found in this distribution, be it the RC4, RSA, lhash, DES, etc., code; not just the SSL code. The SSL documentation included with this distribution is covered by the same copyright terms except that the holder is Tim Hudson (tjh@cryptsoft.com). + Copyright remains Eric Young's, and as such any Copyright notices in the code are not to be removed. If this package is used in a product, Eric Young should be given attribution as the author of the parts of the library used. This can be in the form of a textual message at program startup or in documentation (online or textual) provided with the package. + Redistribution and use in source and binary forms, with or without modification, are permitted provided that the following conditions are met: + + + Redistribution of source code must retain the copyright notice, this list of conditions and the following disclaimer. + + + Redistribution in binary form must reproduce the above copyright notice, this list of conditions and the following disclaimer in the documentation and/or other materials provided with the distribution. + + + All advertising materials mentioning features or use of this software must display the following acknowledgment: "This product includes cryptographic software written by Eric Young (eay@cryptsoft.com)" The word 'cryptographic' can be left out if the routines from the library being used are not cryptographic related :-). + + + If you include any Windows specific code (or a derivative thereof) from the apps directory (application code) you must include an acknowledgment: "This product includes software written by Tim Hudson (tjh@cryptsoft.com)" + + + THIS SOFTWARE IS PROVIDED BY ERIC YOUNG ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE AUTHOR OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + The license and distribution terms for any publicly available version or derivative of this code cannot be changed. i.e. this code cannot simply be copied and put under another distribution license [including the GNU Public License.] + Pentaho Reporting Flow Engine + The following software may be included in this product: Pentaho Reporting Flow Engine (including core, flow-engine, libbase, libfonts, libformula, liblayout, libloader, librepository, libserializer, and libxml). Use of any of this software is governed by the terms of the license below: + Jump to LGPL Version 2.1 + Pixman + The following software may be included in this product: Pixman (libpixman). Use of any of this software is governed by the terms of the license below: + The following is the MIT license, agreed upon by most contributors. + Copyright holders of new code should use this license statement where possible. They may also add themselves to the list below. + Copyright 1987, 1988, 1989, 1998 The Open GroupCopyright 1987, 1988, 1989 Digital Equipment CorporationCopyright 1999, 2004, 2008 Keith PackardCopyright 2000 SuSE, Inc.Copyright 2000 Keith Packard, member of The XFree86 Project, Inc.Copyright 2004, 2005, 2007, 2008, 2009, 2010 Red Hat, Inc.Copyright 2004 Nicholas MiellCopyright 2005 Lars Knoll & Zack Rusin, TrolltechCopyright 2005 Trolltech ASCopyright 2007 Luca BarbatoCopyright 2008 Aaron Plattner, NVIDIA CorporationCopyright 2008 Rodrigo KumperaCopyright 2008 André TupinambáCopyright 2008 Mozilla CorporationCopyright 2008 Frederic PlourdeCopyright 2009, Oracle and/or its affiliates. All rights reserved.Copyright 2009, 2010 Nokia Corporation + Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the "Software"), to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions: The above copyright notice and this permission notice (including the next paragraph) shall be included in all copies or substantial portions of the Software. + THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. + poppler + The following software may be included in this product: poppler. Use of any of this software is governed by the terms of the license below: + Jump to GPL Version 2 + PostgreSQL + The following software may be included in this product: PostgreSQL. Use of any of this software is governed by the terms of the license below: + PostgreSQL is released under the PostgreSQL License, a liberal Open Source license, similar to the BSD or MIT licenses. + PostgreSQL Database Management System(formerly known as Postgres, then as Postgres95) + Portions Copyright (c) 1996-2012, The PostgreSQL Global Development Group + Portions Copyright (c) 1994, The Regents of the University of California + Permission to use, copy, modify, and distribute this software and its documentation for any purpose, without fee, and without a written agreement is hereby granted, provided that the above copyright notice and this paragraph and the following two paragraphs appear in all copies. + IN NO EVENT SHALL THE UNIVERSITY OF CALIFORNIA BE LIABLE TO ANY PARTY FOR DIRECT, INDIRECT, SPECIAL, INCIDENTAL, OR CONSEQUENTIAL DAMAGES, INCLUDING LOST PROFITS, ARISING OUT OF THE USE OF THIS SOFTWARE AND ITS DOCUMENTATION, EVEN IF THE UNIVERSITY OF CALIFORNIA HAS BEEN ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + THE UNIVERSITY OF CALIFORNIA SPECIFICALLY DISCLAIMS ANY WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE. THE SOFTWARE PROVIDED HEREUNDER IS ON AN "AS IS" BASIS, AND THE UNIVERSITY OF CALIFORNIA HAS NO OBLIGATIONS TO PROVIDE MAINTENANCE, SUPPORT, UPDATES, ENHANCEMENTS, OR MODIFICATIONS. + Python + The following software may be included in this product: Python. Use of any of this software is governed by the terms of the license below: + PSF LICENSE AGREEMENT FOR PYTHON 2.3 + 1. This LICENSE AGREEMENT is between the Python Software Foundation ("PSF"), and the Individual or Organization ("Licensee") accessing and otherwise using Python 2.3 software in source or binary form and its associated documentation. + 2. Subject to the terms and conditions of this License Agreement, PSF hereby grants Licensee a nonexclusive, royalty-free, world-wide license to reproduce, analyze, test, perform and/or display publicly, prepare derivative works, distribute, and otherwise use Python 2.3 alone or in any derivative version, provided, however, that PSF's License Agreement and PSF's notice of copyright, i.e., "Copyright (c) 2001, 2002, 2003, 2004 Python Software Foundation; All Rights Reserved" are retained in Python 2.3 alone or in any derivative version prepared by Licensee. + 3. In the event Licensee prepares a derivative work that is based on or incorporates Python 2.3 or any part thereof, and wants to make the derivative work available to others as provided herein, then Licensee hereby agrees to include in any such work a brief summary of the changes made to Python 2.3. + 4. PSF is making Python 2.3 available to Licensee on an "AS IS" basis. PSF MAKES NO REPRESENTATIONS OR WARRANTIES, EXPRESS OR IMPLIED. BY WAY OF EXAMPLE, BUT NOT LIMITATION, PSF MAKES NO AND DISCLAIMS ANY REPRESENTATION OR WARRANTY OF MERCHANTABILITY OR FITNESS FOR ANY PARTICULAR PURPOSE OR THAT THE USE OF PYTHON 2.3 WILL NOT INFRINGE ANY THIRD PARTY RIGHTS. + 5. PSF SHALL NOT BE LIABLE TO LICENSEE OR ANY OTHER USERS OF PYTHON 2.3 FOR ANY INCIDENTAL, SPECIAL, OR CONSEQUENTIAL DAMAGES OR LOSS AS A RESULT OF MODIFYING, DISTRIBUTING, OR OTHERWISE USING PYTHON 2.3, OR ANY DERIVATIVE THEREOF, EVEN IF ADVISED OF THE POSSIBILITY THEREOF. + 6. This License Agreement will automatically terminate upon a material breach of its terms and conditions. + 7. Nothing in this License Agreement shall be deemed to create any relationship of agency, partnership, or joint venture between PSF and Licensee. This License Agreement does not grant permission to use PSF trademarks or trade name in a trademark sense to endorse or promote products or services of Licensee, or any third party. + 8. By copying, installing or otherwise using Python 2.3, Licensee agrees to be bound by the terms and conditions of this License Agreement. + BEOPEN.COM LICENSE AGREEMENT FOR PYTHON 2.0 + BEOPEN PYTHON OPEN SOURCE LICENSE AGREEMENT VERSION 1 + 1. This LICENSE AGREEMENT is between BeOpen.com ("BeOpen"), having an office at 160 Saratoga Avenue, Santa Clara, CA 95051, and the Individual or Organization ("Licensee") accessing and otherwise using this software in source or binary form and its associated documentation ("the Software"). + 2. Subject to the terms and conditions of this BeOpen Python License Agreement, BeOpen hereby grants Licensee a non-exclusive, royalty-free, world-wide license to reproduce, analyze, test, perform and/or display publicly, prepare derivative works, distribute, and otherwise use the Software alone or in any derivative version, provided, however, that the BeOpen Python License is retained in the Software, alone or in any derivative version prepared by Licensee. + 3. BeOpen is making the Software available to Licensee on an "AS IS" basis. BEOPEN MAKES NO REPRESENTATIONS OR WARRANTIES, EXPRESS OR IMPLIED. BY WAY OF EXAMPLE, BUT NOT LIMITATION, BEOPEN MAKES NO AND DISCLAIMS ANY REPRESENTATION OR WARRANTY OF MERCHANTABILITY OR FITNESS FOR ANY PARTICULAR PURPOSE OR THAT THE USE OF THE SOFTWARE WILL NOT INFRINGE ANY THIRD PARTY RIGHTS. + 4. BEOPEN SHALL NOT BE LIABLE TO LICENSEE OR ANY OTHER USERS OF THE SOFTWARE FOR ANY INCIDENTAL, SPECIAL, OR CONSEQUENTIAL DAMAGES OR LOSS AS A RESULT OF USING, MODIFYING OR DISTRIBUTING THE SOFTWARE, OR ANY DERIVATIVE THEREOF, EVEN IF ADVISED OF THE POSSIBILITY THEREOF. + 5. This License Agreement will automatically terminate upon a material breach of its terms and conditions. + 6. This License Agreement shall be governed by and interpreted in all respects by the law of the State of California, excluding conflict of law provisions. Nothing in this License Agreement shall be deemed to create any relationship of agency, partnership, or joint venture between BeOpen and Licensee. This License Agreement does not grant permission to use BeOpen trademarks or trade names in a trademark sense to endorse or promote products or services of Licensee, or any third party. As an exception, the "BeOpen Python" logos available at http://www.pythonlabs.com/logos.html may be used according to the permissions granted on that web page. + 7. By copying, installing or otherwise using the software, Licensee agrees to be bound by the terms and conditions of this License Agreement. + CNRI LICENSE AGREEMENT FOR PYTHON 1.6.1 + 1. This LICENSE AGREEMENT is between the Corporation for National Research Initiatives, having an office at 1895 Preston White Drive, Reston, VA 20191 ("CNRI"), and the Individual or Organization ("Licensee") accessing and otherwise using Python 1.6.1 software in source or binary form and its associated documentation. + 2. Subject to the terms and conditions of this License Agreement, CNRI hereby grants Licensee a nonexclusive, royalty-free, world-wide license to reproduce, analyze, test, perform and/or display publicly, prepare derivative works, distribute, and otherwise use Python 1.6.1 alone or in any derivative version, provided, however, that CNRI's License Agreement and CNRI's notice of copyright, i.e., "Copyright (c) 1995-2001 Corporation for National Research Initiatives; All Rights Reserved" are retained in Python 1.6.1 alone or in any derivative version prepared by Licensee. Alternately, in lieu of CNRI's License Agreement, Licensee may substitute the following text (omitting the quotes): "Python 1.6.1 is made available subject to the terms and conditions in CNRI's License Agreement. This Agreement together with Python 1.6.1 may be located on the Internet using the following unique, persistent identifier (known as a handle): 1895.22/1013. This Agreement may also be obtained from a proxy server on the Internet using the following URL: http://hdl.handle.net/1895.22/1013". + 3. In the event Licensee prepares a derivative work that is based on or incorporates Python 1.6.1 or any part thereof, and wants to make the derivative work available to others as provided herein, then Licensee hereby agrees to include in any such work a brief summary of the changes made to Python 1.6.1. + 4. CNRI is making Python 1.6.1 available to Licensee on an "AS IS" basis. CNRI MAKES NO REPRESENTATIONS OR WARRANTIES, EXPRESS OR IMPLIED. BY WAY OF EXAMPLE, BUT NOT LIMITATION, CNRI MAKES NO AND DISCLAIMS ANY REPRESENTATION OR WARRANTY OF MERCHANTABILITY OR FITNESS FOR ANY PARTICULAR PURPOSE OR THAT THE USE OF PYTHON 1.6.1 WILL NOT INFRINGE ANY THIRD PARTY RIGHTS. + 5. CNRI SHALL NOT BE LIABLE TO LICENSEE OR ANY OTHER USERS OF PYTHON 1.6.1 FOR ANY INCIDENTAL, SPECIAL, OR CONSEQUENTIAL DAMAGES OR LOSS AS A RESULT OF MODIFYING, DISTRIBUTING, OR OTHERWISE USING PYTHON 1.6.1, OR ANY DERIVATIVE THEREOF, EVEN IF ADVISED OF THE POSSIBILITY THEREOF. + 6. This License Agreement will automatically terminate upon a material breach of its terms and conditions. + 7. This License Agreement shall be governed by the federal intellectual property law of the United States, including without limitation the federal copyright law, and, to the extent such U.S. federal law does not apply, by the law of the Commonwealth of Virginia, excluding Virginia's conflict of law provisions. Notwithstanding the foregoing, with regard to derivative works based on Python 1.6.1 that incorporate non-separable material that was previously distributed under the GNU General Public License (GPL), the law of the Commonwealth of Virginia shall govern this License Agreement only as to issues arising under or with respect to Paragraphs 4, 5, and 7 of this License Agreement. Nothing in this License Agreement shall be deemed to create any relationship of agency, partnership, or joint venture between CNRI and Licensee. This License Agreement does not grant permission to use CNRI trademarks or trade name in a trademark sense to endorse or promote products or services of Licensee, or any third party. + 8. By clicking on the "ACCEPT" button where indicated, or by copying, installing or otherwise using Python 1.6.1, Licensee agrees to be bound by the terms and conditions of this License Agreement. + ACCEPT + CWI LICENSE AGREEMENT FOR PYTHON 0.9.0 THROUGH 1.2 + Copyright (c) 1991 - 1995, Stichting Mathematisch Centrum Amsterdam, The Netherlands. All rights reserved. + Permission to use, copy, modify, and distribute this software and its documentation for any purpose and without fee is hereby granted, provided that the above copyright notice appear in all copies and that both that copyright notice and this permission notice appear in supporting documentation, and that the name of Stichting Mathematisch Centrum or CWI not be used in advertising or publicity pertaining to distribution of the software without specific, written prior permission. + STICHTING MATHEMATISCH CENTRUM DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE, INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS, IN NO EVENT SHALL STICHTING MATHEMATISCH CENTRUM BE LIABLE FOR ANY SPECIAL, INDIRECT OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. + Random123: a Library of Counter-Based Random Number Generators + The following software may be included in this product: Random123: a Library of Counter-Based Random Number Generators. Use of any of this software is governed by the terms of the license below: + Copyright 2010-2011, D. E. Shaw Research. + All rights reserved. + Redistribution and use in source and binary forms, with or without + modification, are permitted provided that the following conditions are + met: + * Redistributions of source code must retain the above copyright notice, this list of conditions, and the following disclaimer. + * Redistributions in binary form must reproduce the above copyright notice, this list of conditions, and the following disclaimer in the documentation and/or other materials provided with the distribution. + * Neither the name of D. E. Shaw Research nor the names of its contributors may be used to endorse or promote products derived from this software without specific prior written permission. + THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + Raptor RDF Parser Library + The following software may be included in this product: Raptor RDF Parser Library. Use of any of this software is governed by the terms of the license below: + Copyright (C) 2000-2008 David BeckettCopyright (C) 2000-2005 University of Bristol. All Rights Reserved. + All the licenses below are alternatives and if you select one license, that one alone applies. + Jump to LGPL Version 2.1 + Jump to Apache License Version 2.0 + Rasqal RDF Query Library + The following software may be included in this product: Rasqal RDF Query Library. Use of any of this software is governed by the terms of the license below: + Copyright (C) 2000-2008 David BeckettCopyright (C) 2000-2005 University of Bristol. All Rights Reserved. + All the licenses below are alternatives and if you select one license, that one alone applies. + Jump to LGPL Version 2.1 + Jump to Apache License Version 2.0 + Redland RDF Application Framework + The following software may be included in this product: Redland RDF Application Framework. Use of any of this software is governed by the terms of the license below: + Copyright (C) 2000-2008 David BeckettCopyright (C) 2000-2005 University of Bristol. All Rights Reserved. + All the licenses below are alternatives and if you select one license, that one alone applies. + Jump to LGPL Version 2.1 + Jump to Apache License Version 2.0 + Remote Control Wrapper + The following software may be included in this product: Remote Control Wrapper. Use of any of this software is governed by the terms of the license below: + Created by Martin Kahr under a MIT-style license. Copyright (c) 2006/2007 martinkahr.com. All rights reserved. + Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the "Software"), to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions: + The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software. + THE SOFTWARE IS PROVIDED AS IS, WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. + Rhino + The following software may be included in this product: Rhino. Use of any of this software is governed by the terms of the license below: + Jump to MPL Version 1.1 + SANE + The following software may be included in this product: SANE. Use of any of this software is governed by the terms of the license below: + sane - Scanner Access Now Easy. Copyright (C) 1997-1999 David Mosberger-Tang and Andreas Beck + This file is part of the SANE package. + This file is in the public domain. You may use and modify it as you see fit, as long as this copyright message is included and that there is an indication as to what modifications have been made (if any). + SANE is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. + This file declares SANE application interface. See the SANE standard for a detailed explanation of the interface. + STLPort + The following software may be included in this product:STLport. Use of any of this software is governed by the terms of the license below: + License Agreement + Boris Fomitchev grants Licensee a non-exclusive, non-transferable, royalty-free license to use STLport and its documentation without fee. + By downloading, using, or copying STLport or any portion thereof, Licensee agrees to abide by the intellectual property laws and all other applicable laws of the United States of America, and to all of the terms and conditions of this Agreement. + Licensee shall maintain the following copyright and permission notices on STLport sources and its documentation unchanged: + Copyright 1999,2000 Boris Fomitchev + This material is provided "as is", with absolutely no warranty expressed or implied. Any use is at your own risk. + Permission to use or copy this software for any purpose is hereby granted without fee, provided the above notices are retained on all copies. Permission to modify the code and to distribute modified code is granted, provided the above notices are retained, and a notice that the code was modified is included with the above copyright notice. + The Licensee may distribute binaries compiled with STLport (whether original or modified) without any royalties or restrictions. + The Licensee may distribute original or modified STLport sources, provided that: + + + The conditions indicated in the above permission notice are met; + + + The following copyright notices are retained when present, and conditions provided in accompanying permission notices are met: + + + Copyright 1994 Hewlett-Packard Company + Copyright 1996,97 Silicon Graphics Computer Systems, Inc. + Copyright 1997 Moscow Center for SPARC Technology. + Permission to use, copy, modify, distribute and sell this software and its documentation for any purpose is hereby granted without fee, provided that the above copyright notice appear in all copies and that both that copyright notice and this permission notice appear in supporting documentation. Hewlett-Packard Company makes no representations about the suitability of this software for any purpose. It is provided "as is" without express or implied warranty. + Permission to use, copy, modify, distribute and sell this software and its documentation for any purpose is hereby granted without fee, provided that the above copyright notice appear in all copies and that both that copyright notice and this permission notice appear in supporting documentation. Silicon Graphics makes no representations about the suitability of this software for any purpose. It is provided "as is" without express or implied warranty. + Permission to use, copy, modify, distribute and sell this software and its documentation for any purpose is hereby granted without fee, provided that the above copyright notice appear in all copies and that both that copyright notice and this permission notice appear in supporting documentation. Moscow Center for SPARC Technology makes no representations about the suitability of this software for any purpose. It is provided "as is" without express or implied warranty. + SVGPathSeg polyfill + The following software may be included in this product: SVGPathSeg polyfill. Use of any of this software is governed by the terms of the license below: + Copyright 2015 The Chromium Authors. All rights reserved. + + The Chromium Authors can be found at + http://src.chromium.org/svn/trunk/src/AUTHORS + + Redistribution and use in source and binary forms, with or without + modification, are permitted provided that the following conditions are + met: + + * Redistributions of source code must retain the above copyright + notice, this list of conditions and the following disclaimer. + * Redistributions in binary form must reproduce the above + copyright notice, this list of conditions and the following disclaimer + in the documentation and/or other materials provided with the + distribution. + * Neither the name of Google Inc. nor the names of its + contributors may be used to endorse or promote products derived from + this software without specific prior written permission. + + THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS + "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT + LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR + A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT + OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, + SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT + LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, + DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY + THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT + (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE + OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + TWAIN + The following software may be included in this product: TWAIN. Use of any of this software is governed by the terms of the license below: + The TWAIN License + The TWAIN Working Group grants customer ("Customer") the worldwide, royalty-free, non-exclusive license to reproduce and distribute the software and documentation of the TWAIN toolkit ("TWAIN Toolkit"). The TWAIN Toolkit was designed to be used by third parties to assist them in becoming compliant with the TWAIN standard, but it has not been developed to the standards of a commercial product. Consequently, the TWAIN toolkit is provided AS IS without any warranty. THE TWAIN Working Group disclaims all warranties in the TWAIN toolkit whether implied, express or statutory, including, without limitation, the implied warranties of merchantability, non infringement of third party rights and fitness for a particular purpose. The TWAIN Working Group disclaims all liability for damages, whether direct, indirect, special, incidental, or consequential, arising from the reproduction, distribution, modification, or other use of the TWAIN Toolkit. + As a condition of this license, Customer agrees to include in software programs based in whole or in part on the TWAIN Toolkit the following provisions in (i) the header or similar file in such software and (ii) prominently in its documentation and to require its sublicensees to include these provisions in similar locations: The TWAIN Toolkit is distributed as is. The developer and distributors of the TWAIN Toolkit expressly disclaim all implied, express or statutory warranties including, without limitation, the implied warranties of merchantability, non infringement of third party rights and fitness for a particular purpose. Neither the developers nor the distributors will be liable for damages, whether direct, indirect, special, incidental, or consequential, as a result of the reproduction, modification, distribution or other use of the TWAIN Toolkit. + Unicode CLDR data repository + The following software may be included in this product: Unicode's CLDR data repository. Use of any of this software is governed by the terms of the license below: + Copyright 1991-2005 Unicode, Inc. All rights reserved. Distributed under the Terms of Use in http://www.unicode.org/copyright.html. + Permission is hereby granted, free of charge, to any person obtaining a copy of the Unicode data files and any associated documentation (the "Data Files") or Unicode software and any associated documentation (the "Software") to deal in the Data Files or Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, and/or sell copies of the Data Files or Software, and to permit persons to whom the Data Files or Software are furnished to do so, provided that (a) the above copyright notice(s) and this permission notice appear with all copies of the Data Files or Software, (b) both the above copyright notice(s) and this permission notice appear in associated documentation, and (c) there is clear notice in each modified Data File or in the Software as well as in the documentation associated with the Data File(s) or Software that the data or software has been modified. + THE DATA FILES AND SOFTWARE ARE PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT OF THIRD PARTY RIGHTS. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR HOLDERS INCLUDED IN THIS NOTICE BE LIABLE FOR ANY CLAIM, OR ANY SPECIAL INDIRECT OR CONSEQUENTIAL DAMAGES, OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THE DATA FILES OR SOFTWARE. + Except as contained in this notice, the name of a copyright holder shall not be used in advertising or otherwise to promote the sale, use or other dealings in these Data Files or Software without prior written authorization of the copyright holder. + UnixODBC + The following software may be included in this product: unixODBC. Use of any of this software is governed by the terms of the license below: + Jump to LGPL Version 2.1 + W3C Simple API for CSS (SAC) + The following software may be included in this product: W3C Simple API for CSS (SAC). Use of any of this software is governed by the terms of the license below: + W3C IPR SOFTWARE NOTICE + Copyright © 2002 World Wide Web Consortium, (Massachusetts Institute of Technology, Institut National de Recherche en Informatique et en Automatique, Keio University). All Rights Reserved. + Note: The original version of the W3C Software Copyright Notice and License could be found at http://www.w3.org/Consortium/Legal/copyright-software-19980720 + Copyright © 1994-2002 World Wide Web Consortium, (Massachusetts Institute of Technology, Institut National de Recherche en Informatique et en Automatique, Keio University). All Rights Reserved. http://www.w3.org/Consortium/Legal/ + This W3C work (including software, documents, or other related items) is being provided by the copyright holders under the following license. By obtaining, using and/or copying this work, you (the licensee) agree that you have read, understood, and will comply with the following terms and conditions: + Permission to use, copy, and modify this software and its documentation, with or without modification, for any purpose and without fee or royalty is hereby granted, provided that you include the following on ALL copies of the software and documentation or portions thereof, including modifications, that you make: + + + The full text of this NOTICE in a location viewable to users of the redistributed or derivative work. + + + Any pre-existing intellectual property disclaimers, notices, or terms and conditions. If none exist, a short notice of the following form (hypertext is preferred, text is permitted) should be used within the body of any redistributed or derivative code: "Copyright © 2002 World Wide Web Consortium, (Massachusetts Institute of Technology, Institut National de Recherche en Informatique et en Automatique, Keio University). All Rights Reserved. http://www.w3.org/Consortium/Legal/" + + + Notice of any changes or modifications to the W3C files, including the date changes were made. (We recommend you provide URIs to the location from which the code is derived.) + + + THIS SOFTWARE AND DOCUMENTATION IS PROVIDED "AS IS," AND COPYRIGHT HOLDERS MAKE NO REPRESENTATIONS OR WARRANTIES, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO, WARRANTIES OF MERCHANTABILITY OR FITNESS FOR ANY PARTICULAR PURPOSE OR THAT THE USE OF THE SOFTWARE OR DOCUMENTATION WILL NOT INFRINGE ANY THIRD PARTY PATENTS, COPYRIGHTS, TRADEMARKS OR OTHER RIGHTS. + COPYRIGHT HOLDERS WILL NOT BE LIABLE FOR ANY DIRECT, INDIRECT, SPECIAL OR CONSEQUENTIAL DAMAGES ARISING OUT OF ANY USE OF THE SOFTWARE OR DOCUMENTATION. + The name and trademarks of copyright holders may NOT be used in advertising or publicity pertaining to the software without specific, written prior permission. Title to copyright in this software and any associated documentation will at all times remain with copyright holders. + X11 XRender Extension + The following software may be included in this product: X11 XRender Extension. Use of any of this software is governed by the terms of the license below: + Copyright © 2000 SuSE, Inc. + Permission to use, copy, modify, distribute, and sell this software and its documentation for any purpose is hereby granted without fee, provided that the above copyright notice appear in all copies and that both that copyright notice and this permission notice appear in supporting documentation, and that the name of SuSE not be used in advertising or publicity pertaining to distribution of the software without specific, written prior permission. SuSE makes no representations about the suitability of this software for any purpose. It is provided "as is" without express or implied warranty. + SuSE DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE, INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS, IN NO EVENT SHALL SuSE BE LIABLE FOR ANY SPECIAL, INDIRECT OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. + Xalan + The following software may be included in this product: Xalan. Use of any of this software is governed by the terms of the license below: + Jump to Apache License Version 2.0 + XML Security Library (xmlsec) + The following software may be included in this product: XML Security Library (xmlsec). Use of any of this software is governed by the terms of the license below: + xmlsec, xmlsec-openssl, xmlsec-gnutls libraries + Copyright (C) 2002-2003 Aleksey Sanin. All Rights Reserved. + Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the "Software"), to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions: + The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software. + THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FIT- NESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE ALEKSEY SANIN BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CON- NECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. + Except as contained in this notice, the name of Aleksey Sanin shall not be used in advertising or otherwise to promote the sale, use or other dealings in this Software without prior written authorization from him. + xmlsec-nss library + Copyright (C) 2002-2003 Aleksey Sanin. All Rights Reserved. + Copyright (c) 2003 America Online, Inc. All rights reserved. + Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the "Software"), to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions: + The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software. + Portions of the Software were created using source code and/or APIs governed by the Mozilla Public License (MPL). The MPL is available at http://www.mozilla.org/MPL/MPL-1.1.html. The MPL permits such portions to be distributed with code not governed by MPL, as long as the requirements of MPL are fulfilled for such portions. + THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FIT- NESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE ALEKSEY SANIN BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CON- NECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. + Except as contained in this notice, the name of Aleksey Sanin shall not be used in advertising or otherwise to promote the sale, use or other dealings in this Software without prior written authorization from him. + XSLT MathML Library + The following software may be included in this product: XSLT MathML Library. Use of any of this software is governed by the terms of the license below: + Copyright + Copyright (C) 2001-2003 Vasil Yaroshevich + Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the ``Software''), to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions: + The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software. + Except as contained in this notice, the names of individuals credited with contribution to this software shall not be used in advertising or otherwise to promote the sale, use or other dealings in this Software without prior written authorization from the individuals in question. + Any stylesheet derived from this Software that is publicly distributed will be identified with a different name and the version strings in any derived Software will be changed so that no possibility of confusion between the derived package and this Software will exist. + Warranty + THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL NORMAN WALSH OR ANY OTHER CONTRIBUTOR BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. + zlib + The following software may be included in this product: zlib. Use of any of this software is governed by the terms of the license below: + (C) 1995-2002 Jean-loup Gailly and Mark Adler + This software is provided 'as-is', without any express or implied warranty. In no event will the authors be held liable for any damages arising from the use of this software. + Permission is granted to anyone to use this software for any purpose, including commercial applications, and to alter it and redistribute it freely, subject to the following restrictions: + 1. The origin of this software must not be misrepresented; you must not claim that you wrote the original software. If you use this software in a product, an acknowledgment in the product documentation would be appreciated but is not required. + 2. Altered source versions must be plainly marked as such, and must not be misrepresented as being the original software. + 3. This notice may not be removed or altered from any source distribution. + Extensions + Only third party extensions are listed here whose source code is not in the LibreOffice tree. + Convert Text to Number + The following software may be included in this product: Convert Text to Number. Use of any of this software is governed by the terms of the license below: + Copyright (C) 2008/2009 - Cor Nouws + Jump to LGPL Version 3 + LanguageTool Grammar Checker + The following software may be included in this product: LanguageTool Grammar Checker. Use of any of this software is governed by the terms of the license below: + Jump to LGPL Version 3 + Numbertext + The following software may be included in this product: Numbertext. Use of any of this software is governed by the terms of the license below: + License: LGPL/BSD dual-license, 2009-2010 (C) László Németh (nemeth at openoffice dot org) + Numbertext language data (Soros programs): + LGPL/BSD dual-license, 2009-2010 (C) László Németh et al. (see AUTHORS) + Serbian modules: + CC/LGPL/BSD tri-license, 2009 (C) Goran Rakić (grakic at devbase dot net) + Note: for full distribution with specifications, IDE and JavaScript implementation, see http://NUMBERTEXT.org + Software distributed under the License is distributed on an "AS IS" basis, WITHOUT WARRANTY OF ANY KIND, either express or implied. + Jump to LGPL Version 3 + Solver for Nonlinear Programming + The following software may be included in this product: Solver for Nonlinear Programming. Use of any of this software is governed by the terms of the license below: + Copyright 2009 by Sun Microsystems, Inc. + Jump to LGPL Version 3 + Fonts + Adobe PostScript® AFM files + The following software may be included in this product: PostScript® AFM Files. Use of any of this software is governed by the terms of the license below: + Adobe Core 35 AFM Files with 314 Glyph Entries + This file and the 35 PostScript® AFM files it accompanies may be used, copied, and distributed for any purpose and without charge, with or without modification, provided that all copyright notices are retained; that the AFM files are not distributed without this file; that all modifications to this file or any of the AFM files are prominently noted in the modified file(s); and that this paragraph is not modified. Adobe Systems has no responsibility or obligation to support the use of the AFM files. + Caladea + Copyright (c) 2012 Huerta Tipográfica + This Font Software is licensed under the Apache License, Version 2.0 as shown below. + Jump to Apache License Version 2.0 + Carlito + Copyright (c) 2010-2013 by tyPoland Lukasz Dziedzic with Reserved Font Name "Carlito". + This Font Software is licensed under the SIL Open Font License, Version 1.1 as shown below. + Jump to SIL Open Font License, Version 1.1 + Deja Vu + The following software may be included in this product: Deja Vu fonts. Use of any of this software is governed by the terms of the license below: + Fonts are (c) Bitstream (see below). DejaVu changes are in public domain. Glyphs imported from Arev fonts are (c) Tavmjong Bah (see below) + Bitstream Vera Fonts Copyright + Copyright (c) 2003 by Bitstream, Inc. All Rights Reserved. Bitstream Vera is a trademark of Bitstream, Inc. + Permission is hereby granted, free of charge, to any person obtaining a copy of the fonts accompanying this license ("Fonts") and associated documentation files (the "Font Software"), to reproduce and distribute the Font Software, including without limitation the rights to use, copy, merge, publish, distribute, and/or sell copies of the Font Software, and to permit persons to whom the Font Software is furnished to do so, subject to the following conditions: + The above copyright and trademark notices and this permission notice shall be included in all copies of one or more of the Font Software typefaces. + The Font Software may be modified, altered, or added to, and in particular the designs of glyphs or characters in the Fonts may be modified and additional glyphs or characters may be added to the Fonts, only if the fonts are renamed to names not containing either the words "Bitstream" or the word "Vera". + This License becomes null and void to the extent applicable to Fonts or Font Software that has been modified and is distributed under the "Bitstream Vera" names. + The Font Software may be sold as part of a larger software package but no copy of one or more of the Font Software typefaces may be sold by itself. + THE FONT SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO ANY WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT OF COPYRIGHT, PATENT, TRADEMARK, OR OTHER RIGHT. IN NO EVENT SHALL BITSTREAM OR THE GNOME FOUNDATION BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, INCLUDING ANY GENERAL, SPECIAL, INDIRECT, INCIDENTAL, OR CONSEQUENTIAL DAMAGES, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF THE USE OR INABILITY TO USE THE FONT SOFTWARE OR FROM OTHER DEALINGS IN THE FONT SOFTWARE. + Except as contained in this notice, the names of Gnome, the Gnome Foundation, and Bitstream Inc., shall not be used in advertising or otherwise to promote the sale, use or other dealings in this Font Software without prior written authorization from the Gnome Foundation or Bitstream Inc., respectively. For further information, contact: fonts at gnome dot org. + Arev Fonts Copyright + Copyright (c) 2006 by Tavmjong Bah. All Rights Reserved. + Permission is hereby granted, free of charge, to any person obtaining a copy of the fonts accompanying this license ("Fonts") and associated documentation files (the "Font Software"), to reproduce and distribute the modifications to the Bitstream Vera Font Software, including without limitation the rights to use, copy, merge, publish, distribute, and/or sell copies of the Font Software, and to permit persons to whom the Font Software is furnished to do so, subject to the following conditions: + The above copyright and trademark notices and this permission notice shall be included in all copies of one or more of the Font Software typefaces. + The Font Software may be modified, altered, or added to, and in particular the designs of glyphs or characters in the Fonts may be modified and additional glyphs or characters may be added to the Fonts, only if the fonts are renamed to names not containing either the words "Tavmjong Bah" or the word "Arev". + This License becomes null and void to the extent applicable to Fonts or Font Software that has been modified and is distributed under the "Tavmjong Bah Arev" names. + The Font Software may be sold as part of a larger software package but no copy of one or more of the Font Software typefaces may be sold by itself. + THE FONT SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO ANY WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT OF COPYRIGHT, PATENT, TRADEMARK, OR OTHER RIGHT. IN NO EVENT SHALL TAVMJONG BAH BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, INCLUDING ANY GENERAL, SPECIAL, INDIRECT, INCIDENTAL, OR CONSEQUENTIAL DAMAGES, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF THE USE OR INABILITY TO USE THE FONT SOFTWARE OR FROM OTHER DEALINGS IN THE FONT SOFTWARE. + Except as contained in this notice, the name of Tavmjong Bah shall not be used in advertising or otherwise to promote the sale, use or other dealings in this Font Software without prior written authorization from Tavmjong Bah. For further information, contact: tavmjong @ free . fr. + Gentium + The following software may be included in this product: Gentium fonts. Use of any of this software is governed by the terms of the license below: + Copyright (c) 2003-2008 SIL International (http://www.sil.org/), with Reserved Font Names "Gentium" and "SIL". + This Font Software is licensed under the SIL Open Font License, Version 1.1. This license is copied below, and is also available with a FAQ at: http://scripts.sil.org/OFL + Jump to SIL Open Font License, Version 1.1 + Liberation + The following software may be included in this product: Liberation fonts. Use of any of this software is governed by the terms of the license below: + This Font Software is licensed under the SIL Open Font License, Version 1.1. This license is copied below, and is also available with a FAQ at: http://scripts.sil.org/OFL + Jump to SIL Open Font License, Version 1.1 + LICENSE AGREEMENT AND LIMITED PRODUCT WARRANTYLIBERATION FONT SOFTWARE + This agreement governs the use of the Software and any updates to the Software, regardless of the delivery mechanism. Subject to the following terms, Red Hat, Inc. ("Red Hat") grants to the user ("Client") a license to this work pursuant to the GNU General Public License v.2 with the exceptions set forth below and such other terms as are set forth in this End User License Agreement. + 1. The Software and License Exception. LIBERATION font software (the "Software") consists of TrueType-OpenType formatted font software for rendering LIBERATION typefaces in sans-serif, serif, and monospaced character styles. You are licensed to use, modify, copy, and distribute the Software pursuant to the GNU General Public License v.2 with the following exceptions: + (a) As a special exception, if you create a document which uses this font, and embed this font or unaltered portions of this font into the document, this font does not by itself cause the resulting document to be covered by the GNU General Public License. This exception does not however invalidate any other reasons why the document might be covered by the GNU General Public License. If you modify this font, you may extend this exception to your version of the font, but you are not obligated to do so. If you do not wish to do so, delete this exception statement from your version. + (b) As a further exception, any distribution of the object code of the Software in a physical product must provide you the right to access and modify the source code for the Software and to reinstall that modified version of the Software in object code form on the same physical product on which you received it. + 2. Intellectual Property Rights. The Software and each of its components, including the source code, documentation, appearance, structure and organization are owned by Red Hat and others and are protected under copyright and other laws. Title to the Software and any component, or to any copy, modification, or merged portion shall remain with the aforementioned, subject to the applicable license. The "LIBERATION" trademark is a trademark of Red Hat, Inc. in the U.S. and other countries. This agreement does not permit Client to distribute modified versions of the Software using Red Hat's trademarks. If Client makes a redistribution of a modified version of the Software, then Client must modify the files names to remove any reference to the Red Hat trademarks and must not use the Red Hat trademarks in any way to reference or promote the modified Software. + 3. Limited Warranty. To the maximum extent permitted under applicable law, the Software is provided and licensed "as is" without warranty of any kind, expressed or implied, including the implied warranties of merchantability, non-infringement or fitness for a particular purpose. Red Hat does not warrant that the functions contained in the Software will meet Client's requirements or that the operation of the Software will be entirely error free or appear precisely as described in the accompanying documentation. + 4. Limitation of Remedies and Liability. To the maximum extent permitted by applicable law, Red Hat or any Red Hat authorized dealer will not be liable to Client for any incidental or consequential damages, including lost profits or lost savings arising out of the use or inability to use the Software, even if Red Hat or such dealer has been advised of the possibility of such damages. + 5. General. If any provision of this agreement is held to be unenforceable, that shall not affect the enforceability of the remaining provisions. This agreement shall be governed by the laws of the State of North Carolina and of the United States, without regard to any conflict of laws provisions, except that the United Nations Convention on the International Sale of Goods shall not apply. + Copyright © 2007 Red Hat, Inc. All rights reserved. LIBERATION is a trademark of Red Hat, Inc. + Linux Libertine G and Linux Biolinum G + This Font Software is Copyright (c) 2003-2006, Philipp H. Poll (http://linuxlibertine.sf.net/).All Rights Reserved."Linux Libertine" is a Reserved Font Name for this Font Software. + Graphite extension of the original Linux Libertine font was made by Laszlo Nemeth under the same license.Our fonts are free in the sense of the GPL. In short: Changing the font is allowed as long as the derivative work is published under the same license again. Pedantics keep claiming that the embedded use of GPL-fonts in i.e. PDFs requires the free publication of the PDF as well. This is why our GPL contains the so called "font exception". + Jump to GPL version 2 + As a special exception, if you create a document which uses this font, and embed this font or unaltered portions of this font into the document, this font does not by itself cause the resulting document to be covered by the GNU General Public License. This exception does not however invalidate any other reasons why the document might be covered by the GNU General Public License. If you modify this font, you may extend this exception to your version of the font, but you are not obligated to do so. If you do not wish to do so, delete this exception statement from your version. + Additionally our fonts are licensed under the Open Fonts License (see below). + This Font Software is licensed under the SIL Open Font License, Version 1.0. No modification of the license is permitted, only verbatim copy is allowed. This license is copied below, and is also available with a FAQ at: http://scripts.sil.org/OFL + SIL OPEN FONT LICENSE Version 1.0 - 22 November 2005 + PREAMBLE The goals of the Open Font License (OFL) are to stimulate worldwide development of cooperative font projects, to support the font creation efforts of academic and linguistic communities, and to provide an open framework in which fonts may be shared and improved in partnership with others. + The OFL allows the licensed fonts to be used, studied, modified and redistributed freely as long as they are not sold by themselves. The fonts, including any derivative works, can be bundled, embedded, redistributed and sold with any software provided that the font names of derivative works are changed. The fonts and derivatives, however, cannot be released under any other type of license. + DEFINITIONS "Font Software" refers to any and all of the following: - font files - data files - source code - build scripts - documentation + "Reserved Font Name" refers to the Font Software name as seen by users and any other names as specified after the copyright statement. + "Standard Version" refers to the collection of Font Software components as distributed by the Copyright Holder. + "Modified Version" refers to any derivative font software made by adding to, deleting, or substituting -- in part or in whole -- any of the components of the Standard Version, by changing formats or by porting the Font Software to a new environment. + "Author" refers to any designer, engineer, programmer, technical writer or other person who contributed to the Font Software. + PERMISSION & CONDITIONS Permission is hereby granted, free of charge, to any person obtaining a copy of the Font Software, to use, study, copy, merge, embed, modify, redistribute, and sell modified and unmodified copies of the Font Software, subject to the following conditions: + 1) Neither the Font Software nor any of its individual components, in Standard or Modified Versions, may be sold by itself. + 2) Standard or Modified Versions of the Font Software may be bundled, redistributed and sold with any software, provided that each copy contains the above copyright notice and this license. These can be included either as stand-alone text files, human-readable headers or in the appropriate machine-readable metadata fields within text or binary files as long as those fields can be easily viewed by the user. + 3) No Modified Version of the Font Software may use the Reserved Font Name(s), in part or in whole, unless explicit written permission is granted by the Copyright Holder. This restriction applies to all references stored in the Font Software, such as the font menu name and other font description fields, which are used to differentiate the font from others. + 4) The name(s) of the Copyright Holder or the Author(s) of the Font Software shall not be used to promote, endorse or advertise any Modified Version, except to acknowledge the contribution(s) of the Copyright Holder and the Author(s) or with their explicit written permission. + 5) The Font Software, modified or unmodified, in part or in whole, must be distributed using this license, and may not be distributed under any other license. + TERMINATION This license becomes null and void if any of the above conditions are not met. + DISCLAIMER THE FONT SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO ANY WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT OF COPYRIGHT, PATENT, TRADEMARK, OR OTHER RIGHT. IN NO EVENT SHALL THE COPYRIGHT HOLDER BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, INCLUDING ANY GENERAL, SPECIAL, INDIRECT, INCIDENTAL, OR CONSEQUENTIAL DAMAGES, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF THE USE OR INABILITY TO USE THE FONT SOFTWARE OR FROM OTHER DEALINGS IN THE FONT SOFTWARE. + Open Sans + The following software may be included in this product: Open Sans fonts. Use of any of this software is governed by the terms of the license below: + Jump to Apache License Version 2.0 + PT Serif + The following software may be included in this product: PT Serif fonts. Use of any of this software is governed by the terms of the license below: + Copyright (c) 2010, ParaType Ltd. (http://www.paratype.com/public), with Reserved Font Names "PT Sans", "PT Serif" and "ParaType". + This Font Software is licensed under the SIL Open Font License, Version 1.1. This license is copied below, and is also available with a FAQ at: http://scripts.sil.org/OFL + Jump to SIL Open Font License, Version 1.1 + Source Code Pro + The following software may be included in this product: Source Code Pro fonts. Use of any of this software is governed by the terms of the license below: + Copyright 2010, 2012 Adobe Systems Incorporated (http://www.adobe.com/), with Reserved Font Name 'Source'. All Rights Reserved. Source is a trademark of Adobe Systems Incorporated in the United States and/or other countries. + This Font Software is licensed under the SIL Open Font License, Version 1.1. This license is copied below, and is also available with a FAQ at: http://scripts.sil.org/OFL + Jump to SIL Open Font License, Version 1.1 + Source Sans Pro + The following software may be included in this product: Source Sans Pro fonts. Use of any of this software is governed by the terms of the license below: + Copyright 2010, 2012 Adobe Systems Incorporated (http://www.adobe.com/), with Reserved Font Name 'Source'. All Rights Reserved. Source is a trademark of Adobe Systems Incorporated in the United States and/or other countries. + This Font Software is licensed under the SIL Open Font License, Version 1.1. This license is copied below, and is also available with a FAQ at: http://scripts.sil.org/OFL + Jump to SIL Open Font License, Version 1.1 + Dictionaries + Afrikaans + Spelling dictionary + The following software may be included in this product: Afrikaans spelling dictionary. Use of any of this software is governed by the terms of the license below: + Afrikaans Wordlist + The Afrikaans wordlist used by MySpell is made up of multiple wordlists. These are wither in the public domain, are used with the authors permission or are licensed under the LGPL. The majority of the words are derived from the Nieuwoudt and Viljoen list. + The Nieuwoudt list was first published in this form in 1993 by Bernard A Nieuwoudt. Contact details: origen at icon co za or bnieuwoudt at acm org + Copyright (C) 1993, 2003 Bernard A Nieuwoudt relicensed under the LGPL. + The Viljoen list is derived from the original Nieuwoudt list and is used with permission of the author and relicensed under the LGPL. + Copyright (C) 1998 Danie Viljoen + MySpell Affix File + Copyright (C) 2003 Dwayne Bailey under the LGPL based on the original ispell list by Renier de Vos which was released under the BSD license. + Hyphenation patterns + The following software may be included in this product: Afrikaans hyphenation patterns. Use of any of this software is governed by the terms of the license below: + Copyright (C) 2005 Friedel Wolff + This library is free software; you can redistribute it and/or modify it under the terms of the GNU Lesser General Public License as published by the Free Software Foundation; either version 2.1 of the License, or (at your option) any later version. + Arabic + Spelling dictionary + The following software may be included in this product: Arabic spelling dictionary. Use of any of this software is governed by the terms of the license below: + Author of Hunspell-ar, the arabic dictionary for Hunspell (spellchecker): 2006-2008, Mohamed Kebdani, med.kebdani (at) gmail.com + GPL 2.0/LGPL 2.1/MPL 1.1 tri-license + The contents of this software may be used under the terms of the GNU General Public License Version 2 or later (the "GPL"), or the GNU Lesser General Public License Version 2.1 or later (the "LGPL") the Mozilla Public License Version 1.1 or later (the "MPL"). + Software distributed under these licenses is distributed on an "AS IS" basis, WITHOUT WARRANTY OF ANY KIND, either express or implied. See the licenses for the specific language governing rights and limitations under the licenses. + Thesaurus + The following software may be included in this product: Arabic thesaurus. Use of any of this software is governed by the terms of the license below: + 2006-2009, Taha Zerrouki, taha_zerrouki at gawab.com + GPL 2.0/LGPL 2.1/MPL 1.1 tri-license + The contents of this software may be used under the terms of the GNU General Public License Version 2 or later (the "GPL"), or the GNU Lesser General Public License Version 2.1 or later (the "LGPL") the Mozilla Public License Version 1.1 or later (the "MPL"). + Software distributed under these licenses is distributed on an "AS IS" basis, WITHOUT WARRANTY OF ANY KIND, either express or implied. See the licenses for the specific language governing rights and limitations under the licenses. + Aragonese + Spelling dictionary + The following software may be included in this product: Aragonese spelling dictionary. Use of any of this software is governed by the terms of the license below: + Copyright (c) 2011 Santiago Paricio (sparicio<at>gmail<dot>com)Copyright (c) 2011 Juan Pablo Martínez (jpmart<at>unizar<dot>es) + MPL1.1/GPLv3+/LGPLv3+ Tri-licence + Version 0.2 of the wordlist (an_ES.dic) has been built using free corpuses have been used as Wikipedia in Aragonese (http://an.wikipedia.org) and wordlists obtained from Apertium dictionaries (http://apertium.svn.sourceforge.net/viewvc/apertium/tags/apertium-es-an/release-2.0/). + Belarusian + Spelling dictionary + The following software may be included in this product: Belarusian spelling dictionary. Use of any of this software is governed by the terms of the license below: + Creative Commons CC-BY-SA + Author: Mikalai Udodau <mikalai.udodau@gmail.com>Origin: Словазбор аўтарскі; арфаграфія паводле ТСБМ-2005 + Bengali + Spelling dictionary + The following software may be included in this product: Bengali spelling dictionary. Use of any of this software is governed by the terms of the license below: + Jump to GNU GPL version 2.0 + Breton + Spelling dictionary + The following software may be included in this product: Breton spelling dictionary. Use of any of this software is governed by the terms of the license below: + LICENSE: "An Drouizig" spelling dictionary: LGPL + Bulgarian + Spelling dictionary + The following software may be included in this product: Bulgarian spelling dictionary. Use of any of this software is governed by the terms of the license below: + Jump to GNU GPL version 2.0 + Hyphenation patterns + The following software may be included in this product: Bulgarian hyphenation patterns. Use of any of this software is governed by the terms of the license below: + Copyright (C) 2001 Anton Zinoviev and Borislav MitevMaintained by Radostin Radnev + Jump to GNU GPL version 2.0 + Thesaurus + The following software may be included in this product: Bulgarian thesaurus. Use of any of this software is governed by the terms of the license below: + Copyright (C) 2001 Radostin Radnev + Jump to GNU GPL version 2.0 + Catalan + Spelling dictionary + The following software may be included in this product: Catalan spelling dictionary. Use of any of this software is governed by the terms of the license below: + Copyright (C) 2002-2008 Joan Moratinos <jmo@softcatala.org> + This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation; either version 2 of the License, or (at your option) any later version. This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. + See the GNU General Public License for more details. You should have received a copy of the GNU General Public License along with this program; if not, write to the Free Software Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. + Jump to GPL version 3 + Hyphenation patterns + The following software may be included in this product: Catalan hyphenation patterns. Use of any of this software is governed by the terms of the license below: + Jump to GPL version 3 + Thesaurus + The following software may be included in this product: Catalan thesaurus. Use of any of this software is governed by the terms of the license below: + Copyright (C) 2009 Joan Montané <joan@montane.cat> --- Softcatalà + License: GPL/LGPL + Jump to GPL version 3 + Jump to LGPL version 3 + Czech + Thesaurus + The following software may be included in this product: Czech thesaurus. Use of any of this software is governed by the terms of the license below: + Copyright (c) 1994,2008 Karel Pala, Jan Všianskýpala@fi.muni.cz + You can freely use the thesaurus in OpenOffice.org (or its derivatives). You can not modify it or use for commercial purposes without the author's approval. + Croatian + Spelling dictionary + The following software may be included in this product: Croatian spelling dictionary. Use of any of this software is governed by the terms of the license below: + Jump to LGPL Version 2.1 + Hyphenation patterns + The following software may be included in this product: Croatian hyphenation patterns. Use of any of this software is governed by the terms of the license below: + These patterns were manually converted from TeX hyphenation patterns using the guide at http://wiki.services.openoffice.org/wiki/Documentation/SL/Using_TeX_hyphenation_patterns_in_OpenOffice.org + Original version: http://tug.org/svn/texhyphen/trunk/hyph-utf8/tex/generic/hyph-utf8/patterns/txt/hyph-hr.pat.txt?revision=416 + License: OpenOffice.org adaption of this file is licensed under the GNU LGPL license. + Jump to LGPL Version 2.1 + Original license text: This file is part of hyph-utf8 package and resulted from semi-manual conversions of hyphenation patterns into UTF-8 in June 2008. + Source: hrhyph.tex (1996-04-10) Author: Marinović Igor <migor at student.math.hr> + The above mentioned file should become obsolete, and the author of the original file should preferably modify this file instead. + Modifications were needed in order to support native UTF-8 engines, but functionality (hopefully) didn't change in any way, at least not intentionally. This file is no longer stand-alone; at least for 8-bit engines you probably want to use loadhyph-foo.tex (which will load this file) instead. + Modifications were done by Jonathan Kew, Mojca Miklavec & Arthur Reutenauer with help & support from: - Karl Berry, who gave us free hands and all resources - Taco Hoekwater, with useful macros - Hans Hagen, who did the unicodifisation of patterns already long before and helped with testing, suggestions and bug reports - Norbert Preining, who tested & integrated patterns into TeX Live + However, the "copyright/copyleft" owner of patterns remains the original author. + The copyright statement of this file is thus: + Do with this file whatever needs to be done in future for the sake of "a better world" as long as you respect the copyright of original file. If you're the original author of patterns or taking over a new revolution, please remove all of the TUG comments & credits that we added here - you are the Queen / the King, we are only the servants. + If you want to change this file, rather than uploading directly to CTAN, we would be grateful if you could send it to us (http://tug.org/tex-hyphen) or ask for credentials for SVN repository and commit it yourself; we will then upload the whole "package" to CTAN. + Before a new "pattern-revolution" starts, please try to follow some guidelines if possible: + - \lccode is *forbidden*, and I really mean it - all the patterns should be in UTF-8 - the only "allowed" TeX commands in this file are: \patterns, \hyphenation, and if you really cannot do without, also \input and \message - in particular, please no \catcode or \lccode changes, they belong to loadhyph-foo.tex, and no \lefthyphenmin and \righthyphenmin, they have no influence here and belong elsewhere - \begingroup and/or \endinput is not needed - feel free to do whatever you want inside comments + We know that TeX is extremely powerful, but give a stupid parser at least a chance to read your patterns. + For more information see http://tug.org/tex-hyphen + Danish + Spelling dictionary + The following software may be included in this product: Danish spelling dictionary. Use of any of this software is governed by the terms of the license below: + Stavekontrolden - Danish dictionary files for Hunspell + Version 1.6 - 2010-09-19 + da_DK.dic, da_DK.aff: © 2010 Foreningen for frit tilgængelige sprogværktøjer + http://www.stavekontrolden.dk + These files are published under the following open source licenses: + + + GNU GPL version 2.0 + + + GNU LGPL version 2.1 + + + Mozilla MPL version 1.1 + + + This dictionary is based on data from Det Danske Sprog- og Litteraturselskab + (The Danish Society for Language and Literature), http://www.dsl.dk. + Hyphenation patterns + The following software may be included in this product: Danish hyphenation patterns. Use of any of this software is governed by the terms of the license below: + Thesaurus + The following software may be included in this product: Danish thesaurus. Use of any of this software is governed by the terms of the license below: + + + GNU GPL version 2.0 + + + GNU LGPL version 2.1 + + + Mozilla MPL version 1.1 + + + Stavekontrolden - Danish thesaurus files for OpenOffice.org 3.0. + Den Danske Ordbog - Synonymer + DanNet - leksikalsk-semantisk ordnet fra Det Danske Sprog- og Litteraturselskab og Center for Sprogteknologi, Københavns Universitet + © 2007 Foreningen for frit tilgængelige sprogværktøjer + Dutch + Spelling dictionary and hyphenation patterns + The following software may be included in this product: Dutch spelling dictionary and hyphenation patterns. Use of any of this software is governed by the terms of the license below: + 1. Name: Dutch word list for spell checking - OpenTaal + 2. Version of words list: 2.10G; version of spell checking: 2.10G. + 3. Requirements: Hunspell 1.2.8 and higher + 4. Spelling Seal of Dutch Language Union: The OpenTaal list of lemmas has received the Spelling Seal of Approval from the Dutch Language Union, the formal Dutch language institute. For more information please see: http://www.taalunieversum.org/keurmerk/ + 5. Copyrights: © 2006-2010 OpenTaal, © 2001-2005 Simon Brouwer e.a., © 1996 Nederlandstalige Tex Gebruikersgroep + 6. Licenses: OpenTaal aims to create and publish free Dutch language files. To enable the broadest (re)use the language files are freely available under the below, liberal licenses at the discretion of the user. We strongly recommend to read the applicable license before usage. + A. BSD (revised version): + - Full license text: http://creativecommons.org/licenses/BSD/legalcode + - Summary: http://creativecommons.org/licenses/BSD/deed.en + B. Creative Commons, Attribution 3.0 (unported) + - Full license text: http://creativecommons.org/licenses/by/3.0/legalcode + - Summary: http://creativecommons.org/licenses/by/3.0/deed.en + 7. Support OpenTaal: OpenTaal is a non-profit volunteer project. With your (small) financial support OpenTaal will further expand its activities and enhance its professionalism. Your donation is welcome at account number: 15.62.32.782, BIC: RABONL2U, IBAN: NL88RABO0156232782 of Stichting OpenTaal / OpenTaal Foundation. In the Netherlands your donations are tax deductible. OpenTaal Foundation has been designated by the Dutch Tax Administration as an Institution for General Benefit (algemeen nut beogende instelling or ANBI). Please see: http://belastingdienst.nl/anbi/ + 8. Participate: Everyone is welcome to participate. Please give feedback, discuss on the mailing list or run Harvester. By contributing to the project you agree that your contribution is available under free or/open source licenses. In case you wish, your name will be mentioned on the website. Your are invited to send us your written request. + 9. Rights of third parties: OpenTaal respects the rights of third parties and aims to keep its data freely available. Therefore you may no use protected sources of third parties, i.e. dictionaries, without their permission when you contribute to the project. It is permitted to use the materials of the Dutch Language Union, i.e. their spelling instruction and word list. In case you believe OpenTaal is violating your rights, we ask you to send us a written notice as soon as possible. + 10.Contact: OpenTaal Foundation, http://www.opentaal.org, bestuur@opentaal.org + German + Spelling dictionary + The following software may be included in this product: German spelling dictionary. Use of any of this software is governed by the terms of the license below: + Author: Franz Michael Baumann <frami.baumann@web.de> + License: GNU GPL Version 2 or GPL Version 3 or OASIS 0.1 + The "frami"-dictionary contains the complete word list of Björn Jacke's "igerman98" + (Version: 2011-03-21) and numerous supplements by Franz Michael Baumann according to the reform of 2006-08-01. + OASIS distribution license agreement 0.1 from 2005-11-10 + Without any modifications this dictionary may be distributed with programs that support the OASIS Open Document Format for Office Applications and whose PRIMARY format for saving documents is the Open Document Format. + This requires that all licenses and copyright files are also distributed together with the package the dictionary is shipped with. + Any modifications of the dictionary files are not allowed for this agreement, modifications require the use of the GNU GENERAL PUBLIC LICENSE. + If you have questions or don't get along with this, send me your comments/questions/ideas to Bjoern Jacke <bjoern@j3e.de> + Jump to GPL version 3 + Jump to GPL version 2 + Hyphenation patterns + The following software may be included in this product: German hyphenation patterns. Use of any of this software is governed by the terms of the license below: + Authors: Marco Huggenberger <marco@by-night.ch> / Daniel Naber <naber at danielnaber de> + Version: 2011-05-05 (author and license information in source file added) + License: GNU LGPL + Jump to LGPL Version 2.1 + Thesaurus + The following software may be included in this product: German thesaurus. Use of any of this software is governed by the terms of the license below: + OpenThesaurus - Deutscher Thesaurus - Synonyme und Assoziationen + Version: 2011-05-04 AT + License: GNU LGPL + Jump to LGPL Version 2.1 + Greek + Spelling dictionary + The following software may be included in this product: Greek spelling dictionary. Use of any of this software is governed by the terms of the license below: + GPL 2.0/LGPL 2.1/MPL 1.1 tri-license + Hyphenation patterns + The following software may be included in this product: Greek hyphenation patterns. Use of any of this software is governed by the terms of the license below: + Jump to LGPL Version 2.1 + English (Australia) + Spelling dictionary + The following software may be included in this product: English (Australia) spelling dictionary. Use of any of this software is governed by the terms of the license below: + Copyright (C) 2006 Cameron Roy + This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation; either version 2 of the License, or (at your option) any later version. + Jump to GPL version 2 + English (Canada) + Spelling dictionary + The following software may be included in this product: English (Canada) spelling dictionary. Use of any of this software is governed by the terms of the license below: + Wordlist en_CA spelling and morphological dictionary for OpenOffice.org + Version 2008-12-18 + + Based on Wordlist Hunspell dictionaries version 2008-12-05 + and Wordlist POS and AGID data created by Kevin Atkinson + and released on http://wordlist.sourceforge.net. + + Other fixes: + + OOo Issue 48060 - add numbers with affixes by COMPOUNDRULE (1st, 111th, 1990s etc.) + New REP items (better suggestions for accented words and a few mistakes) + OOo Issue 63541 - remove *dessicated, *dessication + + László Németh <nemeth at OO.o> + + Original license: + + 2008-12-05 Release + + README file for en_US and en_CA Hunspell dictionaries + + These dictionaries are created using the speller/make-hunspell-dict + dictionary in SCOWL, SVN revision 74. + + The NOSUGGEST flag was added to certain taboo words. While I made an + honest attempt to flag the strongest taboo words with the NOSUGGEST + flag, I MAKE NO GUARANTEE THAT I FLAGGED EVERY POSSIBLE TABOO WORD. + The list was originally derived from Németh László, however I removed + some words which, while being considered taboo by some dictionaries, + are not really considered swear words in today's society. + + You can find SCOWL and friend at http://wordlist.sourceforge.net/. + Bug reports should go to the Issue Tracker found on the previously + mentioned web site. General discussion should go to the + wordlist-devel at sourceforge net mailing list. + + COPYRIGHT, SOURCES, and CREDITS: + + The en_US and en_CA dictionaries come directly from SCOWL (up to level + 60) and is thus under the same copyright of SCOWL. The affix file is + a heavily modified version of the original english.aff file which was + released as part of Geoff Kuenning's Ispell and as such is covered by + his BSD license. Part of SCOWL is also based on Ispell thus the + Ispell copyright is included with the SCOWL copyright. + + The collective work is Copyright 2000-2007 by Kevin Atkinson as well + as any of the copyrights mentioned below: + + Copyright 2000-2007 by Kevin Atkinson + + Permission to use, copy, modify, distribute and sell these word + lists, the associated scripts, the output created from the scripts, + and its documentation for any purpose is hereby granted without fee, + provided that the above copyright notice appears in all copies and + that both that copyright notice and this permission notice appear in + supporting documentation. Kevin Atkinson makes no representations + about the suitability of this array for any purpose. It is provided + "as is" without express or implied warranty. + + Alan Beale <biljir@pobox.com> also deserves special credit as he has, + in addition to providing the 12Dicts package and being a major + contributor to the ENABLE word list, given me an incredible amount of + feedback and created a number of special lists (those found in the + Supplement) in order to help improve the overall quality of SCOWL. + + The 10 level includes the 1000 most common English words (according to + the Moby (TM) Words II [MWords] package), a subset of the 1000 most + common words on the Internet (again, according to Moby Words II), and + frequently class 16 from Brian Kelk's "UK English Wordlist + with Frequency Classification". + + The MWords package was explicitly placed in the public domain: + + The Moby lexicon project is complete and has + been place into the public domain. Use, sell, + rework, excerpt and use in any way on any platform. + + Placing this material on internal or public servers is + also encouraged. The compiler is not aware of any + export restrictions so freely distribute world-wide. + + You can verify the public domain status by contacting + + Grady Ward + 3449 Martha Ct. + Arcata, CA 95521-4884 + + grady@netcom.com + grady@northcoast.com + + The "UK English Wordlist With Frequency Classification" is also in the + Public Domain: + + Date: Sat, 08 Jul 2000 20:27:21 +0100 + From: Brian Kelk <Brian.Kelk@cl.cam.ac.uk> + + > I was wondering what the copyright status of your "UK English + > Wordlist With Frequency Classification" word list as it seems to + > be lacking any copyright notice. + + There were many many sources in total, but any text marked + "copyright" was avoided. Locally-written documentation was one + source. An earlier version of the list resided in a filespace called + PUBLIC on the University mainframe, because it was considered public + domain. + + Date: Tue, 11 Jul 2000 19:31:34 +0100 + + > So are you saying your word list is also in the public domain? + + That is the intention. + + The 20 level includes frequency classes 7-15 from Brian's word list. + + The 35 level includes frequency classes 2-6 and words appearing in at + least 11 of 12 dictionaries as indicated in the 12Dicts package. All + words from the 12Dicts package have had likely inflections added via + my inflection database. + + The 12Dicts package and Supplement is in the Public Domain. + + The WordNet database, which was used in the creation of the + Inflections database, is under the following copyright: + + This software and database is being provided to you, the LICENSEE, + by Princeton University under the following license. By obtaining, + using and/or copying this software and database, you agree that you + have read, understood, and will comply with these terms and + conditions.: + + Permission to use, copy, modify and distribute this software and + database and its documentation for any purpose and without fee or + royalty is hereby granted, provided that you agree to comply with + the following copyright notice and statements, including the + disclaimer, and that the same appear on ALL copies of the software, + database and documentation, including modifications that you make + for internal use or for distribution. + + WordNet 1.6 Copyright 1997 by Princeton University. All rights + reserved. + + THIS SOFTWARE AND DATABASE IS PROVIDED "AS IS" AND PRINCETON + UNIVERSITY MAKES NO REPRESENTATIONS OR WARRANTIES, EXPRESS OR + IMPLIED. BY WAY OF EXAMPLE, BUT NOT LIMITATION, PRINCETON + UNIVERSITY MAKES NO REPRESENTATIONS OR WARRANTIES OF MERCHANT- + ABILITY OR FITNESS FOR ANY PARTICULAR PURPOSE OR THAT THE USE OF THE + LICENSED SOFTWARE, DATABASE OR DOCUMENTATION WILL NOT INFRINGE ANY + THIRD PARTY PATENTS, COPYRIGHTS, TRADEMARKS OR OTHER RIGHTS. + + The name of Princeton University or Princeton may not be used in + advertising or publicity pertaining to distribution of the software + and/or database. Title to copyright in this software, database and + any associated documentation shall at all times remain with + Princeton University and LICENSEE agrees to preserve same. + + The 40 level includes words from Alan's 3esl list found in version 4.0 + of his 12dicts package. Like his other stuff the 3esl list is also in the + public domain. + + The 50 level includes Brian's frequency class 1, words appearing + in at least 5 of 12 of the dictionaries as indicated in the 12Dicts + package, and uppercase words in at least 4 of the previous 12 + dictionaries. A decent number of proper names is also included: The + top 1000 male, female, and Last names from the 1990 Census report; a + list of names sent to me by Alan Beale; and a few names that I added + myself. Finally a small list of abbreviations not commonly found in + other word lists is included. + + The name files form the Census report is a government document which I + don't think can be copyrighted. + + The file special-jargon.50 uses common.lst and word.lst from the + "Unofficial Jargon File Word Lists" which is derived from "The Jargon + File". All of which is in the Public Domain. This file also contain + a few extra UNIX terms which are found in the file "unix-terms" in the + special/ directory. + + The 55 level includes words from Alan's 2of4brif list found in version + 4.0 of his 12dicts package. Like his other stuff the 2of4brif is also + in the public domain. + + The 60 level includes Brian's frequency class 0 and all words + appearing in at least 2 of the 12 dictionaries as indicated by the + 12Dicts package. A large number of names are also included: The 4,946 + female names and the 3,897 male names from the MWords package. + + The 70 level includes the 74,550 common dictionary words and the + 21,986 names list from the MWords package The common dictionary words, + like those from the 12Dicts package, have had all likely inflections + added. The 70 level also included the 5desk list from version 4.0 of + the 12Dics package which is the public domain + + The 80 level includes the ENABLE word list, all the lists in the + ENABLE supplement package (except for ABLE), the "UK Advanced Cryptics + Dictionary" (UKACD), the list of signature words in from YAWL package, + and the 10,196 places list from the MWords package. + + The ENABLE package, mainted by M\Cooper <thegrendel@theriver.com>, + is in the Public Domain: + + The ENABLE master word list, WORD.LST, is herewith formally released + into the Public Domain. Anyone is free to use it or distribute it in + any manner they see fit. No fee or registration is required for its + use nor are "contributions" solicited (if you feel you absolutely + must contribute something for your own peace of mind, the authors of + the ENABLE list ask that you make a donation on their behalf to your + favorite charity). This word list is our gift to the Scrabble + community, as an alternate to "official" word lists. Game designers + may feel free to incorporate the WORD.LST into their games. Please + mention the source and credit us as originators of the list. Note + that if you, as a game designer, use the WORD.LST in your product, + you may still copyright and protect your product, but you may *not* + legally copyright or in any way restrict redistribution of the + WORD.LST portion of your product. This *may* under law restrict your + rights to restrict your users' rights, but that is only fair. + + UKACD, by J Ross Beresford <ross@bryson.demon.co.uk>, is under the + following copyright: + + Copyright (c) J Ross Beresford 1993-1999. All Rights Reserved. + + The following restriction is placed on the use of this publication: + if The UK Advanced Cryptics Dictionary is used in a software package + or redistributed in any form, the copyright notice must be + prominently displayed and the text of this document must be included + verbatim. + + There are no other restrictions: I would like to see the list + distributed as widely as possible. + + The 95 level includes the 354,984 single words and 256,772 compound + words from the MWords package, ABLE.LST from the ENABLE Supplement, + and some additional words found in my part-of-speech database that + were not found anywhere else. + + Accent information was taken from UKACD. + + My VARCON package was used to create the American, British, and + Canadian word list. + + Since the original word lists used in the VARCON package came + from the Ispell distribution they are under the Ispell copyright: + + Copyright 1993, Geoff Kuenning, Granada Hills, CA + All rights reserved. + + Redistribution and use in source and binary forms, with or without + modification, are permitted provided that the following conditions + are met: + + 1. Redistribution of source code must retain the above copyright + notice, this list of conditions and the following disclaimer. + 2. Redistribution in binary form must reproduce the above copyright + notice, this list of conditions and the following disclaimer in the + documentation and/or other materials provided with the distribution. + 3. All modifications to the source code must be clearly marked as + such. Binary redistribution based on modified source code + must be clearly marked as modified versions in the documentation + and/or other materials provided with the distribution. + (clause 4 removed with permission from Geoff Kuenning) + 5. The name of Geoff Kuenning may not be used to endorse or promote + products derived from this software without specific prior + written permission. + + THIS SOFTWARE IS PROVIDED BY GEOFF KUENNING AND CONTRIBUTORS ``AS + IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT + LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS + FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL GEOFF + KUENNING OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, + INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, + BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; + LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER + CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT + LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN + ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE + POSSIBILITY OF SUCH DAMAGE. + English (South Africa) + Spelling dictionary + The following software may be included in this product: English (South Africa) spelling dictionary. Use of any of this software is governed by the terms of the license below: + Jump to LGPL Version 2.1 + English (United Kingdom) + Spelling dictionary + The following software may be included in this product: English (United Kingdom) spelling dictionary. Use of any of this software is governed by the terms of the license below: + Jump to LGPL Version 2.1 + Hyphenation patterns + The following software may be included in this product: English (United Kingdom) hyphenation patterns. Use of any of this software is governed by the terms of the license below: + BSD-style. Unlimited copying, redistribution and modification of this file is permitted with this copyright and license information. + English (USA) + Spelling dictionary + The following software may be included in this product: English (USA) spelling dictionary. Use of any of this software is governed by the terms of the license below: + See English (Canada). + Hyphenation patterns + The following software may be included in this product: English (USA) hyphenation patterns. Use of any of this software is governed by the terms of the license below: + BSD-style. Unlimited copying, redistribution and modification of this fileis permitted with this copyright and license information. + Thesaurus + The following software may be included in this product: English (USA) thesaurus. Use of any of this software is governed by the terms of the license below: + WordNet Release 2.1 + This software and database is being provided to you, the LICENSEE, by Princeton University under the following license. By obtaining, using and/or copying this software and database, you agree that you have read, understood, and will comply with these terms and conditions.: + Permission to use, copy, modify and distribute this software and database and its documentation for any purpose and without fee or royalty is hereby granted, provided that you agree to comply with the following copyright notice and statements, including the disclaimer, and that the same appear on ALL copies of the software, database and documentation, including modifications that you make for internal use or for distribution. + WordNet 2.1 Copyright 2005 by Princeton University. All rights reserved. + THIS SOFTWARE AND DATABASE IS PROVIDED "AS IS" AND PRINCETON UNIVERSITY MAKES NO REPRESENTATIONS OR WARRANTIES, EXPRESS OR IMPLIED. BY WAY OF EXAMPLE, BUT NOT LIMITATION, PRINCETON UNIVERSITY MAKES NO REPRESENTATIONS OR WARRANTIES OF MERCHANT- ABILITY OR FITNESS FOR ANY PARTICULAR PURPOSE OR THAT THE USE OF THE LICENSED SOFTWARE, DATABASE OR DOCUMENTATION WILL NOT INFRINGE ANY THIRD PARTY PATENTS, COPYRIGHTS, TRADEMARKS OR OTHER RIGHTS. + The name of Princeton University or Princeton may not be used in advertising or publicity pertaining to distribution of the software and/or database. Title to copyright in this software, database and any associated documentation shall at all times remain with Princeton University and LICENSEE agrees to preserve same. + English sentence checker for LibreOffice + The following software may be included in this product: English sentence checker. Use of any of this software is governed by the terms of the license below: + 2011-2012 (c) László Németh, license: MPL 1.1 / GPLv3+ / LGPLv3+ + Jump to GPL Version 3 + Jump to LGPL Version 3 + Jump to MPL Version 1.1 + Estonian + Spelling dictionary + The following software may be included in this product: Estonian spelling dictionary. Use of any of this software is governed by the terms of the license below: + Dictionary is adapted to myspell by Jaak Pruulmann (jjpp@meso.ee, http://www.meso.ee/~jjpp/speller/ ) on the base of word list created and shared by IEL (Institute of the Estonian Language, tarkvara@eki.ee). The original of EKI software license is available at http://www.eki.ee/eki/licence.html. The work of Jaak Pruulmann is licensed under LGPL (GNU Lesser General Public License). The copies of licenses are added to current file. IEL is informed about the use of this word list. + Software License Agreement + Institute of the Estonian Language + Copyright © Institute of the Estonian Language + E-mail: tarkvara@eki.ee + URL: http://www.eki.ee/tarkvara/ + The present License Agreement gives the user of this Software Product (hereinafter: Product) the right to use the Product for whatever purpose (incl. distribution, copying, altering, inclusion in other software, and selling) on the following conditions: + The present License Agreement should belong unaltered to each copy ever made of this Product; + Neither the Institute of the Estonian Language (hereinafter: IEL) nor the author(s) of the Product will take responsibility for any detriment, direct or indirect, possibly ensuing from the application of the Product; + The IEL is ready to share the Product with other users as we wish to advance research on the Estonian language and to promote the use of Estonian in IT-technology now rapidly developing, yet we refuse to bind ourselves to any further obligation, which means that the IEL is not obliged either to warrant the suitability of the Product for a concrete use, to improve the program, or to provide a more detailed description of the underlying algorithms. (Which does not mean, though, that we may not do it.) + Whenever you use the Product, we request that you inform us by writing to the e-mail address tarkvara@eki.ee or to street address listed below. + Institute of the Estonian Language + Roosikrantsi 6EE-10119 TallinnESTONIA + E-mail: eki@eki.eePhone & Fax: +372-6411443 + Jump to LGPL Version 2.1 + Hyphenation patterns + The following software may be included in this product: Estonian hyphenation patterns. Use of any of this software is governed by the terms of the license below: + Hyphenation file is adapted to OpenOffice.org by Jaak Pruulmann (jjpp@meso.ee, http://www.meso.ee/~jjpp/speller/) on the base of the LaTeX hyphenation file created by Enn Saar (saar@aai.ee), who has signed the JCA (Joint Copyright Agreement) allowing to use his work for OpenOffice.org. The original file is available at address http://www.cs.ut.ee/~tqnu/eehyph.tex and in the heading of the file it is written that this file is licensed under LPPL. The work of Jaak Pruulmann is licensed under LGPL (GNU Lesser General Public License). + Jump to LPPL + Jump to LGPL Version 2.1 + French + Spelling dictionary + The following software may be included in this product: French spelling dictionary. Use of any of this software is governed by the terms of the license below: + Olivier R. - dicollecte<at>free<dot>fr + Dicollecte: http://www.dicollecte.org/ + Licenses: + + + MPL: Mozilla Public License version 1.1 or higher + + + GPL: GNU General Public License version 2.0 or higher + + + LGPL: GNU Lesser General Public License version 2.1 or higher + + + Hyphenation patterns + The following software may be included in this product: French hyphenation patterns. Use of any of this software is governed by the terms of the license below: + Origin: Based on the TeX hyphenation tables frhyph.tex (V2.12) <2002/12/11> http://mirror.ctan.org/language/hyphenation/frhyph.tex + The TeX hyphenation tables are released under the LaTeX Project Public License (LPPL) + Jump to LPPL + License: OpenOffice.org adaptions of this package are licensed under the GNU Lesser General Public License (LGPL) version 2.1 or higher. + Jump to LGPL Version 2.1 + Author: Conversion author is Paul Pichaureau <paul.pichaureau@alcandre.net> + Based on a previous conversion by Blaise Drayer <blaise@drayer.ch> + Thesaurus + The following software may be included in this product: French thesaurus. Use of any of this software is governed by the terms of the license below: + Licence: LGPL: GNU Lesser General Public License version 2.1 or higher. + Jump to LGPL Version 2.1 + Galician + Spelling dictionary + The following software may be included in this product: Galician spelling dictionary. Use of any of this software is governed by the terms of the license below: + This extension was made by Frco. Javier Rial Rodríguez for Mancomún, Centro de Referencia e Servizos de Software Libre 2008 + Spellchecker files (gl_ES.aff, gl_ES.dic) from Mar Castro Pereiro also developed for Mancomún. + Distributed under the GPL License. + Jump to GPL Version 3 + Gujarati + Spelling dictionary + The following software may be included in this product: Gujarati spelling dictionary. Use of any of this software is governed by the terms of the license below: + Jump to GPL Version 3 + Hebrew + Spelling dictionary + The following software may be included in this product: Hebrew spelling dictionary. Use of any of this software is governed by the terms of the license below: + This dictionary is Copyright (C) 2000-2009, Nadav Har'El (nyh@math.technion.ac.il) and Dan Kenigsberg (danken@cs.technion.ac.il). + It is licensed under the GNU General Public License (GPL). + Jump to GPL Version 3 + Hindi + The following software may be included in this product: Hindi spelling dictionary. Use of any of this software is governed by the terms of the license below: + GNU Aspell Hindi Word List PackageCopyright © 2005 Swapnil {Hajare, Sant} <janabhaaratii@ncst.ernet.in> + This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation; either version 2 of the License, or (at your option) any later version. + Conversion made by Laszlo Nemeth, for demonstration of Hunspell Unicode support. + Jump to GPL Version 2 + Hungarian + Spelling dictionary + The following software may be included in this product: Hungarian spelling dictionary. Use of any of this software is governed by the terms of the license below: + GPL 2.0/LGPL 2.1/MPL 1.1 tri-license + The contents of this software may be used under the terms of the GNU General Public License Version 2 or later (the "GPL"), or the GNU Lesser General Public License Version 2.1 or later (the "LGPL", see COPYING.LGPL) or (excepting the LGPLed GNU gettext library in the intl/ directory) the Mozilla Public License Version 1.1 or later (the "MPL", see COPYING.MPL). + Software distributed under these licenses is distributed on an "AS IS" basis, WITHOUT WARRANTY OF ANY KIND, either express or implied. See the licences for the specific language governing rights and limitations under the licenses. + 2010 (c) László Németh & Ferenc Godó + Jump to GPL Version 2 + Jump to LGPL Version 2.1 + Jump to MPL Version 1.1 + Hyphenation patterns + The following software may be included in this product: Hungarian hyphenation patterns. Use of any of this software is governed by the terms of the license below: + Copyright © Bence Nagy <gimb (at) freemail (dot) hu>, 2006 + Original license: GPL v2 + Patch author: László Németh <nemeth (at) OOo> + Patch license: MPL/GPL/LGPL + Jump to GPL Version 2 + Jump to LGPL Version 2.1 + Jump to MPL Version 1.1 + Thesaurus + The following software may be included in this product: Hungarian thesaurus. Use of any of this software is governed by the terms of the license below: + Copyright (C) 2009, László Németh + Jump to GPL Version 2 + Hungarian sentence checker for LibreOffice + The following software may be included in this product: Hungarian sentence checker. Use of any of this software is governed by the terms of the license below: + 2009-2012 (c) László Németh, license: MPL 1.1 / GPLv3+ / LGPLv3+ + Jump to GPL Version 3 + Jump to LGPL Version 3 + Jump to MPL Version 1.1 + Icelandic + Spelling dictionary and thesaurus + The wordlist was developed by Orðabók Háskólans in cooperation with Reiknistofnun Háskóla Íslands in the early nineties and was released into the public domain. Further modifications to the wordlist are also released into the public domain.The thesaurus and words in the spell checker with additional morphological information are from the Icelandic Wiktionary Project, http://is.wiktionary.org. Works released by the Wiktionary project are under the Creative Commons Attribution-ShareAlike 3.0 Unported license.You are free: to Share — to copy, distribute and transmit the work to Remix — to adapt the work to make commercial use of the workUnder the following conditions: Attribution — You must attribute the work in the manner specified by the author or licensor (but not in any way that suggests that they endorse you or your use of the work). Share Alike — If you alter, transform, or build upon this work, you may distribute the resulting work only under the same or similar license to this one. + Jump to CC-BY-SA 3.0 + Italian + Spelling dictionary + The following software may be included in this product: Italian spelling dictionary. Use of any of this software is governed by the terms of the license below: + Copyright (C) 2001, 2002 Gianluca TurconiCopyright (C) 2002, 2003, 2004 Gianluca Turconi and Davide PrinaCopyright (C) 2004, 2005, 2006, 2007 Davide PrinaCopyright (C) 2010 Andrea Pescetti + Jump to GPL Version 3 + Hyphenation patterns + The following software may be included in this product: Italian hyphenation patterns. Use of any of this software is governed by the terms of the license below: + Origin: Based on the TeX hyphenation tables by Claudio Beccari + Author: conversion author is Giuseppe Bilotta <giuseppe.bilotta@gmail.com> + Jump to LGPL Version 3 + Thesaurus + The following software may be included in this product: Italian thesaurus. Use of any of this software is governed by the terms of the license below: + Copyright (C) 2004,2005,2006,2007,2008 Daniela VoltaCopyright (C) 2008 Giovanni ZulianiCopyright (C) 2006,2007,2008 Davide PrinaCopyright (C) 2010 Andrea Pescetti + Jump to GPL Version 3 + Kurdish + Spelling dictionary + The following software may be included in this product: Kurdish spelling dictionary. Use of any of this software is governed by the terms of the license below: + (C) Copyright Reimar Heider <hunspell at ferheng dot org> + With contributions from Kevin P. Scannell <scannell@slu.edu> and Rêzan Tovjîn + The original word list used for this package was augmented using Kevin Scannell's web crawling software "An Crúbadán" and then hand-checked by Ronahi and Tovjîn. + Originally GPL, relicensed on 04-07-2007 to GPLv3, LGPLv3, MPL 1.1 + Jump to GPL Version 3 + Jump to LGPL Version 3 + Jump to MPL Version 1.1 + Lao + Spelling dictionary + The following software may be included in this product: Lao spelling dictionary. Use of any of this software is governed by the terms of the license below: + Copyright (C) 2013 by Brian Eugene Wilson, Robert Martin Campbell + Jump to LGPL Version 2.1 + Latvian + Spelling dictionary + The following software may be included in this product: Latvian spelling dictionary. Use of any of this software is governed by the terms of the license below: + Copyright (C) 2002-2010 Janis Eisaks, jancs@dv.lv, http://dict.dv.lv + Jump to LGPL Version 2.1 + Hyphenation patterns + The following software may be included in this product: Latvian hyphenation patterns. Use of any of this software is governed by the terms of the license below: + Copyright (C) 2004-2005 Jânis Vilims, jvilims@apollo.lv + Jump to LGPL Version 2.1 + Thesaurus + The following software may be included in this product: Latvian thesaurus. Use of any of this software is governed by the terms of the license below: + Copyright (C) 2002-2010 Janis Eisaks, jancs@dv.lv, http://dict.dv.lv + Jump to LGPL Version 2.1 + Lithuanian + Spelling dictionary + The following software may be included in this product: Lithuanian spelling dictionary. Use of any of this software is governed by the terms of the license below: + Copyright (c) Albertas Agejevas <alga@uosis.mif.vu.lt>, 2000, 2001. All rights reserved. + Redistribution and use in source and binary forms, with or without modification, are permitted provided that the following conditions are met: + + + Redistribution of source code must retain the above copyright notice, this list of conditions and the following disclaimer. + + + Redistribution in binary form must reproduce the above copyright notice, this list of conditions and the following disclaimer in the documentation and/or other materials provided with the distribution. + + + Neither the name of the Albertas Agejevas nor the names of its contributors may be used to endorse or promote products derived from this software without specific prior written permission. + + + THIS SOFTWARE IS PROVIDED BY ALBERTAS AGEJEVAS AND CONTRIBUTORS ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL ALBERTAS AGEJEVAS OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + Hyphenation patterns + The following software may be included in this product: Lithuanian hyphenation patterns. Use of any of this software is governed by the terms of the license below: + Origin: TeX hyphenation tables by Sigitas Tolusis and Vytas Statulevicius. The original tables can be found at http://www.vtex.lt/tex/download/zip/texmf.zip as lthyphen.tex. + Author: Converted to OOo format by Albertas Agejevas <alga@akl.lt> + License: LaTeX Project Public Licence + Jump to LPPL + Nepali + Spelling dictionary + The following software may be included in this product: Nepali spelling dictionary. Use of any of this software is governed by the terms of the license below: + Compiled by Madan Puraskar Pustakalaya + Jump to LGPL Version 2.1 + Thesaurus + The following software may be included in this product: Nepali thesaurus. Use of any of this software is governed by the terms of the license below: + Compiled by Madan Puraskar Pustakalaya + Jump to LGPL Version 2.1 + Norwegian + Spelling dictionary + The following software may be included in this product: Norwegian spelling dictionary. Use of any of this software is governed by the terms of the license below: + Jump to GPL Version 2 + Hyphenation patterns + The following software may be included in this product: Norwegian hyphenation patterns. Use of any of this software is governed by the terms of the license below: + Jump to GPL Version 2 + Thesaurus + The following software may be included in this product: Norwegian thesaurus. Use of any of this software is governed by the terms of the license below: + Jump to GPL Version 2 + Occitan + Spelling dictionary + The following software may be included in this product: Occitan spelling dictionary. Use of any of this software is governed by the terms of the license below: + Copyright (C) 2006 Bruno GALLART + This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation; either version 2 of the License, or (at your option) any later version. + Jump to GPL Version 2 + Polish + Spelling dictionary + The following software may be included in this product: Polish spelling dictionary. Use of any of this software is governed by the terms of the license below: + This dictionary for spell-checking Polish texts is licensed under GPL, LGPL, MPL (Mozilla Public License) and Creative Commons ShareAlike licenses (see http://creativecommons.org/licenses/sa/1.0). + Hyphenation patterns + The following software may be included in this product: Polish hyphenation patterns. Use of any of this software is governed by the terms of the license below: + Origin: Based on the TeX hyphenation patterns plhyph.tex, version 3.0a, Wednesday, May 17th, 1995. The original file is in CTAN archives, for example here:http://ctan.binkerton.com/ctan.readme.php?filename=language/polish/plhyph.tex and is licensed under LPPL. + License: OpenOffice.org Adaptions of this package are licensed under the GNU LGPL license. + Author: conversion and corrects author is Artur Polaczyński <artiip@gmail.com> + Jump to LGPL Version 3 + Thesaurus + The following software may be included in this product: Polish thesaurus. Use of any of this software is governed by the terms of the license below: + Copyright (C) 2004-2008 Marcin Miłkowski <milek_pl@users.sourceforge.net> + This product is made available subject to the terms of GNU Lesser General Public License Version 2.1. + Jump to LGPL Version 2.1 + Portuguese + Spelling dictionary + The following software may be included in this product: Portuguese spelling dictionary. Use of any of this software is governed by the terms of the license below: + Copyright (C) 2006 Jose Joao de Almeida, Rui Vilela, Alberto Simões + Dep. Informatica, Universidade do Minho, Portugal + GPL 2.0/LGPL 2.1/MPL 1.1 tri-license + Jump to GPL Version 2 + Jump to LGPL Version 2.1 + Jump to MPL Version 1.1 + Hyphenation patterns + The following software may be included in this product: Portuguese hyphenation patterns. Use of any of this software is governed by the terms of the license below: + Based on the TeX hyphenation tables by Pedro J. de Rezende (Brazilian) and tuned up by J.Joao Dias Almeida + Author: conversion author is Paulo Morgado + Jump to GPL Version 2 + Thesaurus + The following software may be included in this product: Portuguese thesaurus. Use of any of this software is governed by the terms of the license below: + Jump to GPL Version 2 + Portuguese (Brazilian) + Spelling dictionary + The following software may be included in this product: Portuguese (Brazilian) spelling dictionary. Use of any of this software is governed by the terms of the license below: + This dictionary is under continuous development by Raimundo Moura and his team. It is icensed under the terms of the GNU Lesser General Public License version 3 (LGPLv3), as published by the Free Software Foundation, and Mozilla Public License as published by The Mozilla Foundation. The credits are available at http://pt-br.libreoffice.org/projetos/projeto-vero-verificador-ortografico/ and you can find new releases at http://extensions.libreoffice.org + Copyright (C) 2006 - 2013 by Raimundo Santos Moura <raimundo.smoura@gmail.com> + Jump to LGPL Version 3 + Jump to MPL Version 1.1 + Hyphenation patterns + The following software may be included in this product: Portuguese (Brazilian) hyphenation patterns. Use of any of this software is governed by the terms of the license below: + These hyphenation patterns are under continuous development by Raimundo Moura and his team. It is icensed under the terms of the GNU Lesser General Public License version 3 (LGPLv3), as published by the Free Software Foundation, and Mozilla Public License as published by The Mozilla Foundation. The credits are available at http://pt-br.libreoffice.org/projetos/projeto-vero-verificador-ortografico/ and you can find new releases at http://extensions.libreoffice.org + Copyright (C) 2006 - 2013 by Raimundo Santos Moura <raimundo.smoura@gmail.com> + Jump to LGPL Version 3 + Jump to MPL Version 1.1 + Portuguese Brazilian sentence checker for LibreOffice + The following software may be included in this product: Portuguese (Brazilian) sentence checker. Use of any of this software is governed by the terms of the license below: + MPL 1.1 / GPLv3+ / LGPLv3+ + 2013 © Raimundo Santos Moura + Jump to GPL Version 3 + Jump to LGPL Version 3 + Jump to MPL Version 1.1 + Romanian + Spelling dictionary + The following software may be included in this product: Romanian spelling dictionary. Use of any of this software is governed by the terms of the license below: + GPL 2.0/LGPL 2.1/MPL 1.1 tri-license. + Jump to GPL Version 2 + Jump to LGPL Version 2.1 + Jump to MPL Version 1.1 + Hyphenation patterns + The following software may be included in this product: Romanian hyphenation patterns. Use of any of this software is governed by the terms of the license below: + GNU General Public License Version 2 + Jump to GPL Version 2 + Thesaurus + The following software may be included in this product: Romanian thesaurus. Use of any of this software is governed by the terms of the license below: + GNU General Public License Version 2 or later + Jump to GPL Version 2 + Russian + Spelling dictionary + The following software may be included in this product: Russian spelling dictionary. Use of any of this software is governed by the terms of the license below: + Copyright (c) 1997-2008, Alexander I. Lebedev + All rights reserved. + Redistribution and use in source and binary forms, with or without modification, are permitted provided that the following conditions are met: + + + Redistribution of source code must retain the above copyright notice, this list of conditions and the following disclaimer. + + + Redistribution in binary form must reproduce the above copyright notice, this list of conditions and the following disclaimer in the documentation and/or other materials provided with the distribution. + + + Modified versions must be clearly marked as such. + + + The name of Alexander I. Lebedev may not be used to endorse or promote products derived from this software without specific prior written permission. + + + THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + Hyphenation patterns + The following software may be included in this product: Russian hyphenation patterns. Use of any of this software is governed by the terms of the license below: + unknown + Thesaurus + The following software may be included in this product: Russian thesaurus. Use of any of this software is governed by the terms of the license below: + License: GNU LGPL + Author: Mikhail Korolyov <mkorolyov@yandex.ru> + Origin: Абрамовъ, Н. Словарь русскихъ синонимовъ и сходныхъ по смыслу выраженiй. Изд. 3-е, доп., Пг., 1911 + Russian grammar checker + The following software may be included in this product: Russian grammar checker. Use of any of this software is governed by the terms of the license below: + 2009, 2011, 2012 (c) Yakov Reztsov <yr at myooo dot ru>, license: MPL 1.1 / GPL / LGPL + Scottish Gaelic + Spelling dictionary + The following software may be included in this product: Scottish Gaelic spelling dictionary. Use of any of this software is governed by the terms of the license below: + Jump to GPL Version 3 + Serbian + Spelling dictionary + The following software may be included in this product: Serbian spelling dictionary. Use of any of this software is governed by the terms of the license below: + Serbian spellcheck dictionary (files sr.dic, sr.aff, sh.dic, sh.aff) is released under disjunctive tri-licence GNU LGPL version 2.1 or later / MPL version 1.1 or later / GNU GPL version 2 or later giving you the choice of one of the three sets of free software licensing terms. You can also use the dictionary under the terms of the Creative Commons BY-SA 3.0 Unpored licence. + Hyphenation patterns + The following software may be included in this product: Serbian hyphenation patterns. Use of any of this software is governed by the terms of the license below: + Serbian hyphenation patterns (files hyph_sr.dic and hyph_sh.dic) are derived from the official TeX patterns for Serbocroatian language (Cyrillic and Latin) created by Dejan Muhamedagić <dejan@hello-penguin.com> version 2.02 released on 22 June 2008. The format is adopted for usage with Hyphen hyphenation library and is released again as hyphen-sr under the compatible GNU LGPL version 2.1 or later. + Jump to LGPL Version 2.1 + Sinhala + Spelling dictionary + The following software may be included in this product: Sinhala spelling dictionary. Use of any of this software is governed by the terms of the license below: + Copyright (C) <2010> Laknath Semage <blaknath [at] gmail [dot] com> + Jump to GPL Version 3 + Slovak + Spelling dictionary + The following software may be included in this product: Slovak spelling dictionary. Use of any of this software is governed by the terms of the license below: + Data are released under these licenses (you can select one): + + + The GNU General Public License (GPL) Version 2, June 1991 + + + GNU Lesser General Public License Version 2.1, February 1999 + + + Mozilla Public License 1.1 (MPL 1.1) + + + Jump to GPL Version 2 + Jump to LGPL Version 2.1 + Jump to MPL Version 1.1 + Hyphenation patterns + The following software may be included in this product: Slovak hyphenation patterns. Use of any of this software is governed by the terms of the license below: + Dictionary is created by converting TeX hyphenation patterns for Slovak (Author: Jana Chlebíková) with lingucomponent-tools (http://cvs.sourceforge.net/cgi-bin/viewcvs.cgi/oo-cs/lingucomponent-tools/). + Original license: LPPL + Jump to LPPL + Thesaurus + The following software may be included in this product: Slovak thesaurus. Use of any of this software is governed by the terms of the license below: + Copyright (c) 2004-2010 Tibor Bako, yorik (at) szm.sk, Zdenko Podobný, zposter (at) gmail.com + Permission is hereby granted, free of charge, to any person obtaining a copy of this data (the "Data"), to deal in the Data without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Data, and to permit persons to whom the Data is furnished to do so, subject to the following conditions: + The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Data. + THE DATA ARE PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE DATA OR THE USE OR OTHER DEALINGS IN THE DATA. + Slovenian + Spelling dictionary + The following software may be included in this product: Slovenian spelling dictionary. Use of any of this software is governed by the terms of the license below: + Jump to GPL Version 2 + Jump to LGPL Version 2.1 + Hyphenation patterns + The following software may be included in this product: Slovenian hyphenation patterns. Use of any of this software is governed by the terms of the license below: + Jump to GPL Version 2 + Jump to LGPL Version 2.1 + Thesaurus + The following software may be included in this product: Slovenian thesaurus. Use of any of this software is governed by the terms of the license below: + Jump to LGPL Version 2.1 + Spanish + Spelling dictionary + The following software may be included in this product: Spanish spelling dictionary. Use of any of this software is governed by the terms of the licenses (or any later versions) below: + Jump to GPL version 3 + Jump to LGPL Version 3 + Jump to MPL Version 1.1 + Hyphenation patterns + The following software may be included in this product: Spanish hyphenation patterns. Use of any of this software is governed by the terms of the licenses (or any later versions) below: + Jump to GPL version 3 + Jump to LGPL Version 3 + Jump to MPL Version 1.1 + Thesaurus + The following software may be included in this product: Spanish thesaurus. Use of any of this software is governed by the terms of the license below: + Jump to LGPL Version 2.1 + Swahili + Spelling dictionary + The following software may be included in this product: Swahili spelling dictionary. Use of any of this software is governed by the terms of the license below: + Copyright (C) 2004 Jason M Githeko + Jump to LGPL Version 2.1 + Swedish + Spelling dictionary + The following software may be included in this product: Swedish spelling dictionary. Use of any of this software is governed by the terms of the license below: + Copyright © 2003-12 Göran Andersson <goran@init.se>. + This dictionary is made available subject to the terms of GNU Lesser General Public License Version 3. + Jump to LGPL Version 3 + Thesaurus + The following software may be included in this product: Swedish thesaurus. Use of any of this software is governed by the terms of the license below: + This thesaurus was directly converted from Synlex. The synonyms will be displayed sorted by their voted synonym level. + The synlex file <synpairs.xml> license, You are free to use this file with the same license + Copyright (c) Viggo Kann KTH 2009 + THIS MATERIAL IS PROVIDED AS IS, WITH ABSOLUTELY NO WARRANTY EXPRESSED OR IMPLIED. ANY USE IS AT YOUR OWN RISK. + Permission is hereby granted to use or copy this program for any purpose, provided the above notices are retained on all copies. Permission to modify the code and to distribute modified code is granted, provided the above notices are retained, and a notice that the code was modified is included with the above copyright notice. + Telugu + Spelling dictionary + The following software may be included in this product: Telugu spelling dictionary. Use of any of this software is governed by the terms of the license below: + GNU Hunspell Telugu Word List Package adaptation + Copyright © 2010 adaptation to Hunspell, Arjuna Rao ChavalaCopyright © 2005 Aspell Telugu word list released by IndLinux, Khadir + This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation; either version 2 of the License, or (at your option) any later version. + Jump to GPL Version 2 + Hyphenation patterns + The following software may be included in this product: Telugu hyphenation patterns. Use of any of this software is governed by the terms of the license below: + Copyright © 2009 Santhosh Thottingal + The Telugu Hyphenation Dictionary may be used under the terms of either the GNU General Public License Version 3 or later (the "GPL"), or the GNU Lesser General Public License Version 3 or later (the "LGPL") + Jump to GPL Version 3 + Jump to LGPL Version 3 + Thai + Spelling dictionary + The following software may be included in this product: Thai spelling dictionary. Use of any of this software is governed by the terms of the license below: + Jump to LGPL Version 2.1 + Ukrainian + Spelling dictionary + The following software may be included in this product: Ukrainian spelling dictionary. Use of any of this software is governed by the terms of the license below: + Copyright (C) 1999 Vladimir Yakovchuk, Oleg PodgurniyCopyright (C) 2001 Dmytro Kovalyov, Maksym Polyakov, Andriy RysinCopyright (C) 2002 Valentyn Solomko, Volodymyr M. LisivkaCopyright (C) 2005 Andriy Rysin, Eugeniy Meshcheryakov, Dmytro KovalyovCopyright (C) 2006-2009 Andriy Rysin + This dictionary is licensed under GPL 2.0 or above, LGPL 2.1 or above and MPL (Mozilla Public License) 1.1 licenses. + Jump to GPL Version 2 + Jump to LGPL Version 2.1 + Jump to MPL Version 1.1 + Hyphenation patterns + The following software may be included in this product: Ukrainian hyphenation patterns. Use of any of this software is governed by the terms of the license below: + Copyright 1998-2002 Maksym Polyakov. + License: GNU General Public License version 2 or any later version + Jump to GPL Version 2 + Thesaurus + The following software may be included in this product: Ukrainian thesaurus. Use of any of this software is governed by the terms of the license below: + This thesaurus is based on: П. М. Деркач, Короткий словник синонімів української мови, Радянська школа, Київ, 1960 С. Караванський, Пошук українського слова + Copyright (C) 2009 Andriy Rysin + This thesaurus is licensed under GPL, LGPL and MPL (Mozilla Public License) licenses. + Jump to GPL Version 2 + Jump to LGPL Version 2.1 + Jump to MPL Version 1.1 + Vietnamese + Spelling dictionary + The following software may be included in this product: Vietnamese spelling dictionary. Use of any of this software is governed by the terms of the license below: + Authors:Ivan Garcia <capiscuas@gmail.com>Nguyễn Xuân Minh <mxn@zoomtown.com> + This spellchecker for OpenOffice was based on the Vietnamese Dictionary list from Proffessor Hồ Ngọc Đức + This spellchecker is released with GPLv2 license. + Jump to GPL Version 2 + Zulu + Hyphenation patterns + The following software may be included in this product: Zulu hyphenation patterns. Use of any of this software is governed by the terms of the license below: + Copyright (C) 2005, 2007 Friedel Wolff + Jump to LGPL Version 2.1 + Artwork + KDE Crystal theme icons + The following software may be included in this product: KDE Crystal theme icons. Use of any of this software is governed by the terms of the license below: + KDE Crystal theme icons.Copyright (C) 2002 and following years KDE Artists This library is free software; you can redistribute it and/or modify it under the terms of the GNU Lesser General Public License as published by the Free Software Foundation, version 2.1 of the License. + Jump to LGPL Version 2.1 + Tango theme + Portions of the Tango theme contain work licenced under the Creative Commons Attribution-Share Alike 3.0 United States License. To view a copy of this licence, visit http://creativecommons.org/licenses/by-sa/3.0/ or send a letter to Creative Commons, 171 Second Street, Suite 300, San Francisco, California 94105, USA. + This artwork is attributed to the "GNOME Project": http://www.gnome.org + Jump to CC-BY-SA 3.0 + Miscellaneous + Adobe Printer Description Files + The following software may be included in this product: Adobe Printer Description Files. Use of any of this software is governed by the terms of the license below: + Copyright 1987-1995 Adobe Systems Incorporated. + All Rights Reserved. + Permission is granted for redistribution of this file as long as this copyright notice is intact and the contents of the file is not altered in any way from its original form. + End of Copyright statement + International Color Consortium sRGB Profiles + The following software may be included in this product: ICC sRGB Profiles. Use of any of this software is governed by the terms of the license below: + To anyone who acknowledges that the files "sRGB_IEC61966-2-1_noBPC.icc" and "sRGB_IEC61966-2-1_withBPC.icc" are provided "AS IS" WITH NO EXPRESS OR IMPLIED WARRANTY, permission to use, copy and distribute these file for any purpose is hereby granted without fee, provided that the files are not changed including the HP copyright notice tag, and that the name of Hewlett-Packard Company shall not be used in advertising or publicity pertaining to distribution of the software without specific, written prior permission. Hewlett-Packard Company makes no representations about the suitability of this software for any purpose. + GNU Lesser General Public License Version 3 + Copyright © 2007 Free Software Foundation, Inc. <http://fsf.org/> + Everyone is permitted to copy and distribute verbatim copies of this license document, but changing it is not allowed. + This version of the GNU Lesser General Public License incorporates the terms and conditions of version 3 of the GNU General Public License, supplemented by the additional permissions listed below. + 0. Additional Definitions. + As used herein, “this License” refers to version 3 of the GNU Lesser General Public License, and the “GNU GPL” refers to version 3 of the GNU General Public License. + “The Library” refers to a covered work governed by this License, other than an Application or a Combined Work as defined below. + An “Application” is any work that makes use of an interface provided by the Library, but which is not otherwise based on the Library. Defining a subclass of a class defined by the Library is deemed a mode of using an interface provided by the Library. + A “Combined Work” is a work produced by combining or linking an Application with the Library. The particular version of the Library with which the Combined Work was made is also called the “Linked Version”. + The “Minimal Corresponding Source” for a Combined Work means the Corresponding Source for the Combined Work, excluding any source code for portions of the Combined Work that, considered in isolation, are based on the Application, and not on the Linked Version. + The “Corresponding Application Code” for a Combined Work means the object code and/or source code for the Application, including any data and utility programs needed for reproducing the Combined Work from the Application, but excluding the System Libraries of the Combined Work. + 1. Exception to Section 3 of the GNU GPL. + You may convey a covered work under sections 3 and 4 of this License without being bound by section 3 of the GNU GPL. + 2. Conveying Modified Versions. + If you modify a copy of the Library, and, in your modifications, a facility refers to a function or data to be supplied by an Application that uses the facility (other than as an argument passed when the facility is invoked), then you may convey a copy of the modified version: + + + a) under this License, provided that you make a good faith effort to ensure that, in the event an Application does not supply the function or data, the facility still operates, and performs whatever part of its purpose remains meaningful, or + + + b) under the GNU GPL, with none of the additional permissions of this License applicable to that copy. + + + 3. Object Code Incorporating Material from Library Header Files. + The object code form of an Application may incorporate material from a header file that is part of the Library. You may convey such object code under terms of your choice, provided that, if the incorporated material is not limited to numerical parameters, data structure layouts and accessors, or small macros, inline functions and templates (ten or fewer lines in length), you do both of the following: + + + a) Give prominent notice with each copy of the object code that the Library is used in it and that the Library and its use are covered by this License. + + + b) Accompany the object code with a copy of the GNU GPL and this license document. + + + 4. Combined Works. + You may convey a Combined Work under terms of your choice that, taken together, effectively do not restrict modification of the portions of the Library contained in the Combined Work and reverse engineering for debugging such modifications, if you also do each of the following: + + + a) Give prominent notice with each copy of the Combined Work that the Library is used in it and that the Library and its use are covered by this License. + + + b) Accompany the Combined Work with a copy of the GNU GPL and this license document. + + + c) For a Combined Work that displays copyright notices during execution, include the copyright notice for the Library among these notices, as well as a reference directing the user to the copies of the GNU GPL and this license document. + + + d) Do one of the following: + + + 0) Convey the Minimal Corresponding Source under the terms of this License, and the Corresponding Application Code in a form suitable for, and under terms that permit, the user to recombine or relink the Application with a modified version of the Linked Version to produce a modified Combined Work, in the manner specified by section 6 of the GNU GPL for conveying Corresponding Source. + + + 1) Use a suitable shared library mechanism for linking with the Library. A suitable mechanism is one that (a) uses at run time a copy of the Library already present on the user's computer system, and (b) will operate properly with a modified version of the Library that is interface-compatible with the Linked Version. + + + + + e) Provide Installation Information, but only if you would otherwise be required to provide such information under section 6 of the GNU GPL, and only to the extent that such information is necessary to install and execute a modified version of the Combined Work produced by recombining or relinking the Application with a modified version of the Linked Version. (If you use option 4d0, the Installation Information must accompany the Minimal Corresponding Source and Corresponding Application Code. If you use option 4d1, you must provide the Installation Information in the manner specified by section 6 of the GNU GPL for conveying Corresponding Source.) + + + 5. Combined Libraries. + You may place library facilities that are a work based on the Library side by side in a single library together with other library facilities that are not Applications and are not covered by this License, and convey such a combined library under terms of your choice, if you do both of the following: + + + a) Accompany the combined library with a copy of the same work based on the Library, uncombined with any other library facilities, conveyed under the terms of this License. + + + b) Give prominent notice with the combined library that part of it is a work based on the Library, and explaining where to find the accompanying uncombined form of the same work. + + + 6. Revised Versions of the GNU Lesser General Public License. + The Free Software Foundation may publish revised and/or new versions of the GNU Lesser General Public License from time to time. Such new versions will be similar in spirit to the present version, but may differ in detail to address new problems or concerns. + Each version is given a distinguishing version number. If the Library as you received it specifies that a certain numbered version of the GNU Lesser General Public License “or any later version” applies to it, you have the option of following the terms and conditions either of that published version or of any later version published by the Free Software Foundation. If the Library as you received it does not specify a version number of the GNU Lesser General Public License, you may choose any version of the GNU Lesser General Public License ever published by the Free Software Foundation. + If the Library as you received it specifies that a proxy can decide whether future versions of the GNU Lesser General Public License shall apply, that proxy's public statement of acceptance of any version is permanent authorization for you to choose that version for the Library. + GNU Lesser General Public License Version 2.1 + Copyright (C) 1991, 1999 Free Software Foundation, Inc. + 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA + Everyone is permitted to copy and distribute verbatim copies + of this license document, but changing it is not allowed. + + [This is the first released version of the Lesser GPL. It also counts as the successor of the GNU Library Public License, version 2, hence the version number 2.1.] + Preamble + The licenses for most software are designed to take away your freedom to share and change it. By contrast, the GNU General Public Licenses are intended to guarantee your freedom to share and change free software--to make sure the software is free for all its users. + This license, the Lesser General Public License, applies to some specially designated software packages--typically libraries--of the Free Software Foundation and other authors who decide to use it. You can use it too, but we suggest you first think carefully about whether this license or the ordinary General Public License is the better strategy to use in any particular case, based on the explanations below. + When we speak of free software, we are referring to freedom of use, not price. Our General Public Licenses are designed to make sure that you have the freedom to distribute copies of free software (and charge for this service if you wish); that you receive source code or can get it if you want it; that you can change the software and use pieces of it in new free programs; and that you are informed that you can do these things. + To protect your rights, we need to make restrictions that forbid distributors to deny you these rights or to ask you to surrender these rights. These restrictions translate to certain responsibilities for you if you distribute copies of the library or if you modify it. + For example, if you distribute copies of the library, whether gratis or for a fee, you must give the recipients all the rights that we gave you. You must make sure that they, too, receive or can get the source code. If you link other code with the library, you must provide complete object files to the recipients, so that they can relink them with the library after making changes to the library and recompiling it. And you must show them these terms so they know their rights. + We protect your rights with a two-step method: (1) we copyright the library, and (2) we offer you this license, which gives you legal permission to copy, distribute and/or modify the library. + To protect each distributor, we want to make it very clear that there is no warranty for the free library. Also, if the library is modified by someone else and passed on, the recipients should know that what they have is not the original version, so that the original author's reputation will not be affected by problems that might be introduced by others. + Finally, software patents pose a constant threat to the existence of any free program. We wish to make sure that a company cannot effectively restrict the users of a free program by obtaining a restrictive license from a patent holder. Therefore, we insist that any patent license obtained for a version of the library must be consistent with the full freedom of use specified in this license. + Most GNU software, including some libraries, is covered by the ordinary GNU General Public License. This license, the GNU Lesser General Public License, applies to certain designated libraries, and is quite different from the ordinary General Public License. We use this license for certain libraries in order to permit linking those libraries into non-free programs. + When a program is linked with a library, whether statically or using a shared library, the combination of the two is legally speaking a combined work, a derivative of the original library. The ordinary General Public License therefore permits such linking only if the entire combination fits its criteria of freedom. The Lesser General Public License permits more lax criteria for linking other code with the library. + We call this license the "Lesser" General Public License because it does Less to protect the user's freedom than the ordinary General Public License. It also provides other free software developers Less of an advantage over competing non-free programs. These disadvantages are the reason we use the ordinary General Public License for many libraries. However, the Lesser license provides advantages in certain special circumstances. + For example, on rare occasions, there may be a special need to encourage the widest possible use of a certain library, so that it becomes a de-facto standard. To achieve this, non-free programs must be allowed to use the library. A more frequent case is that a free library does the same job as widely used non-free libraries. In this case, there is little to gain by limiting the free library to free software only, so we use the Lesser General Public License. + In other cases, permission to use a particular library in non-free programs enables a greater number of people to use a large body of free software. For example, permission to use the GNU C Library in non-free programs enables many more people to use the whole GNU operating system, as well as its variant, the GNU/Linux operating system. + Although the Lesser General Public License is Less protective of the users' freedom, it does ensure that the user of a program that is linked with the Library has the freedom and the wherewithal to run that program using a modified version of the Library. + The precise terms and conditions for copying, distribution and modification follow. Pay close attention to the difference between a "work based on the library" and a "work that uses the library". The former contains code derived from the library, whereas the latter must be combined with the library in order to run. + TERMS AND CONDITIONS FOR COPYING, DISTRIBUTION AND MODIFICATION + 0. This License Agreement applies to any software library or other program which contains a notice placed by the copyright holder or other authorized party saying it may be distributed under the terms of this Lesser General Public License (also called "this License"). Each licensee is addressed as "you". + A "library" means a collection of software functions and/or data prepared so as to be conveniently linked with application programs (which use some of those functions and data) to form executables. + The "Library", below, refers to any such software library or work which has been distributed under these terms. A "work based on the Library" means either the Library or any derivative work under copyright law: that is to say, a work containing the Library or a portion of it, either verbatim or with modifications and/or translated straightforwardly into another language. (Hereinafter, translation is included without limitation in the term "modification".) + "Source code" for a work means the preferred form of the work for making modifications to it. For a library, complete source code means all the source code for all modules it contains, plus any associated interface definition files, plus the scripts used to control compilation and installation of the library. + Activities other than copying, distribution and modification are not covered by this License; they are outside its scope. The act of running a program using the Library is not restricted, and output from such a program is covered only if its contents constitute a work based on the Library (independent of the use of the Library in a tool for writing it). Whether that is true depends on what the Library does and what the program that uses the Library does. + 1. You may copy and distribute verbatim copies of the Library's complete source code as you receive it, in any medium, provided that you conspicuously and appropriately publish on each copy an appropriate copyright notice and disclaimer of warranty; keep intact all the notices that refer to this License and to the absence of any warranty; and distribute a copy of this License along with the Library. + You may charge a fee for the physical act of transferring a copy, and you may at your option offer warranty protection in exchange for a fee. + 2. You may modify your copy or copies of the Library or any portion of it, thus forming a work based on the Library, and copy and distribute such modifications or work under the terms of Section 1 above, provided that you also meet all of these conditions: + + + a) The modified work must itself be a software library. + + + b) You must cause the files modified to carry prominent notices stating that you changed the files and the date of any change. + + + c) You must cause the whole of the work to be licensed at no charge to all third parties under the terms of this License. + + + d) If a facility in the modified Library refers to a function or a table of data to be supplied by an application program that uses the facility, other than as an argument passed when the facility is invoked, then you must make a good faith effort to ensure that, in the event an application does not supply such function or table, the facility still operates, and performs whatever part of its purpose remains meaningful. + (For example, a function in a library to compute square roots has a purpose that is entirely well-defined independent of the application. Therefore, Subsection 2d requires that any application-supplied function or table used by this function must be optional: if the application does not supply it, the square root function must still compute square roots.) + + + These requirements apply to the modified work as a whole. If identifiable sections of that work are not derived from the Library, and can be reasonably considered independent and separate works in themselves, then this License, and its terms, do not apply to those sections when you distribute them as separate works. But when you distribute the same sections as part of a whole which is a work based on the Library, the distribution of the whole must be on the terms of this License, whose permissions for other licensees extend to the entire whole, and thus to each and every part regardless of who wrote it. + Thus, it is not the intent of this section to claim rights or contest your rights to work written entirely by you; rather, the intent is to exercise the right to control the distribution of derivative or collective works based on the Library. + In addition, mere aggregation of another work not based on the Library with the Library (or with a work based on the Library) on a volume of a storage or distribution medium does not bring the other work under the scope of this License. + 3. You may opt to apply the terms of the ordinary GNU General Public License instead of this License to a given copy of the Library. To do this, you must alter all the notices that refer to this License, so that they refer to the ordinary GNU General Public License, version 2, instead of to this License. (If a newer version than version 2 of the ordinary GNU General Public License has appeared, then you can specify that version instead if you wish.) Do not make any other change in these notices. + Once this change is made in a given copy, it is irreversible for that copy, so the ordinary GNU General Public License applies to all subsequent copies and derivative works made from that copy. + This option is useful when you wish to copy part of the code of the Library into a program that is not a library. + 4. You may copy and distribute the Library (or a portion or derivative of it, under Section 2) in object code or executable form under the terms of Sections 1 and 2 above provided that you accompany it with the complete corresponding machine-readable source code, which must be distributed under the terms of Sections 1 and 2 above on a medium customarily used for software interchange. + If distribution of object code is made by offering access to copy from a designated place, then offering equivalent access to copy the source code from the same place satisfies the requirement to distribute the source code, even though third parties are not compelled to copy the source along with the object code. + 5. A program that contains no derivative of any portion of the Library, but is designed to work with the Library by being compiled or linked with it, is called a "work that uses the Library". Such a work, in isolation, is not a derivative work of the Library, and therefore falls outside the scope of this License. + However, linking a "work that uses the Library" with the Library creates an executable that is a derivative of the Library (because it contains portions of the Library), rather than a "work that uses the library". The executable is therefore covered by this License. Section 6 states terms for distribution of such executables. + When a "work that uses the Library" uses material from a header file that is part of the Library, the object code for the work may be a derivative work of the Library even though the source code is not. Whether this is true is especially significant if the work can be linked without the Library, or if the work is itself a library. The threshold for this to be true is not precisely defined by law. + If such an object file uses only numerical parameters, data structure layouts and accessors, and small macros and small inline functions (ten lines or less in length), then the use of the object file is unrestricted, regardless of whether it is legally a derivative work. (Executables containing this object code plus portions of the Library will still fall under Section 6.) + Otherwise, if the work is a derivative of the Library, you may distribute the object code for the work under the terms of Section 6. Any executables containing that work also fall under Section 6, whether or not they are linked directly with the Library itself. + 6. As an exception to the Sections above, you may also combine or link a "work that uses the Library" with the Library to produce a work containing portions of the Library, and distribute that work under terms of your choice, provided that the terms permit modification of the work for the customer's own use and reverse engineering for debugging such modifications. + You must give prominent notice with each copy of the work that the Library is used in it and that the Library and its use are covered by this License. You must supply a copy of this License. If the work during execution displays copyright notices, you must include the copyright notice for the Library among them, as well as a reference directing the user to the copy of this License. Also, you must do one of these things: + + + a) Accompany the work with the complete corresponding machine-readable source code for the Library including whatever changes were used in the work (which must be distributed under Sections 1 and 2 above); and, if the work is an executable linked with the Library, with the complete machine-readable "work that uses the Library", as object code and/or source code, so that the user can modify the Library and then relink to produce a modified executable containing the modified Library. (It is understood that the user who changes the contents of definitions files in the Library will not necessarily be able to recompile the application to use the modified definitions.) + + + b) Use a suitable shared library mechanism for linking with the Library. A suitable mechanism is one that (1) uses at run time a copy of the library already present on the user's computer system, rather than copying library functions into the executable, and (2) will operate properly with a modified version of the library, if the user installs one, as long as the modified version is interface-compatible with the version that the work was made with. + + + c) Accompany the work with a written offer, valid for at least three years, to give the same user the materials specified in Subsection 6a, above, for a charge no more than the cost of performing this distribution. + + + d) If distribution of the work is made by offering access to copy from a designated place, offer equivalent access to copy the above specified materials from the same place. + + + e) Verify that the user has already received a copy of these materials or that you have already sent this user a copy. + + + For an executable, the required form of the "work that uses the Library" must include any data and utility programs needed for reproducing the executable from it. However, as a special exception, the materials to be distributed need not include anything that is normally distributed (in either source or binary form) with the major components (compiler, kernel, and so on) of the operating system on which the executable runs, unless that component itself accompanies the executable. + It may happen that this requirement contradicts the license restrictions of other proprietary libraries that do not normally accompany the operating system. Such a contradiction means you cannot use both them and the Library together in an executable that you distribute. + 7. You may place library facilities that are a work based on the Library side-by-side in a single library together with other library facilities not covered by this License, and distribute such a combined library, provided that the separate distribution of the work based on the Library and of the other library facilities is otherwise permitted, and provided that you do these two things: + + + a) Accompany the combined library with a copy of the same work based on the Library, uncombined with any other library facilities. This must be distributed under the terms of the Sections above. + + + b) Give prominent notice with the combined library of the fact that part of it is a work based on the Library, and explaining where to find the accompanying uncombined form of the same work. + + + 8. You may not copy, modify, sublicense, link with, or distribute the Library except as expressly provided under this License. Any attempt otherwise to copy, modify, sublicense, link with, or distribute the Library is void, and will automatically terminate your rights under this License. However, parties who have received copies, or rights, from you under this License will not have their licenses terminated so long as such parties remain in full compliance. + 9. You are not required to accept this License, since you have not signed it. However, nothing else grants you permission to modify or distribute the Library or its derivative works. These actions are prohibited by law if you do not accept this License. Therefore, by modifying or distributing the Library (or any work based on the Library), you indicate your acceptance of this License to do so, and all its terms and conditions for copying, distributing or modifying the Library or works based on it. + 10. Each time you redistribute the Library (or any work based on the Library), the recipient automatically receives a license from the original licensor to copy, distribute, link with or modify the Library subject to these terms and conditions. You may not impose any further restrictions on the recipients' exercise of the rights granted herein. You are not responsible for enforcing compliance by third parties with this License. + 11. If, as a consequence of a court judgment or allegation of patent infringement or for any other reason (not limited to patent issues), conditions are imposed on you (whether by court order, agreement or otherwise) that contradict the conditions of this License, they do not excuse you from the conditions of this License. If you cannot distribute so as to satisfy simultaneously your obligations under this License and any other pertinent obligations, then as a consequence you may not distribute the Library at all. For example, if a patent license would not permit royalty-free redistribution of the Library by all those who receive copies directly or indirectly through you, then the only way you could satisfy both it and this License would be to refrain entirely from distribution of the Library. + If any portion of this section is held invalid or unenforceable under any particular circumstance, the balance of the section is intended to apply, and the section as a whole is intended to apply in other circumstances. + It is not the purpose of this section to induce you to infringe any patents or other property right claims or to contest validity of any such claims; this section has the sole purpose of protecting the integrity of the free software distribution system which is implemented by public license practices. Many people have made generous contributions to the wide range of software distributed through that system in reliance on consistent application of that system; it is up to the author/donor to decide if he or she is willing to distribute software through any other system and a licensee cannot impose that choice. + This section is intended to make thoroughly clear what is believed to be a consequence of the rest of this License. + 12. If the distribution and/or use of the Library is restricted in certain countries either by patents or by copyrighted interfaces, the original copyright holder who places the Library under this License may add an explicit geographical distribution limitation excluding those countries, so that distribution is permitted only in or among countries not thus excluded. In such case, this License incorporates the limitation as if written in the body of this License. + 13. The Free Software Foundation may publish revised and/or new versions of the Lesser General Public License from time to time. Such new versions will be similar in spirit to the present version, but may differ in detail to address new problems or concerns. + Each version is given a distinguishing version number. If the Library specifies a version number of this License which applies to it and "any later version", you have the option of following the terms and conditions either of that version or of any later version published by the Free Software Foundation. If the Library does not specify a license version number, you may choose any version ever published by the Free Software Foundation. + 14. If you wish to incorporate parts of the Library into other free programs whose distribution conditions are incompatible with these, write to the author to ask for permission. For software which is copyrighted by the Free Software Foundation, write to the Free Software Foundation; we sometimes make exceptions for this. Our decision will be guided by the two goals of preserving the free status of all derivatives of our free software and of promoting the sharing and reuse of software generally. + NO WARRANTY + 15. BECAUSE THE LIBRARY IS LICENSED FREE OF CHARGE, THERE IS NO WARRANTY FOR THE LIBRARY, TO THE EXTENT PERMITTED BY APPLICABLE LAW. EXCEPT WHEN OTHERWISE STATED IN WRITING THE COPYRIGHT HOLDERS AND/OR OTHER PARTIES PROVIDE THE LIBRARY "AS IS" WITHOUT WARRANTY OF ANY KIND, EITHER EXPRESSED OR IMPLIED, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE. THE ENTIRE RISK AS TO THE QUALITY AND PERFORMANCE OF THE LIBRARY IS WITH YOU. SHOULD THE LIBRARY PROVE DEFECTIVE, YOU ASSUME THE COST OF ALL NECESSARY SERVICING, REPAIR OR CORRECTION. + 16. IN NO EVENT UNLESS REQUIRED BY APPLICABLE LAW OR AGREED TO IN WRITING WILL ANY COPYRIGHT HOLDER, OR ANY OTHER PARTY WHO MAY MODIFY AND/OR REDISTRIBUTE THE LIBRARY AS PERMITTED ABOVE, BE LIABLE TO YOU FOR DAMAGES, INCLUDING ANY GENERAL, SPECIAL, INCIDENTAL OR CONSEQUENTIAL DAMAGES ARISING OUT OF THE USE OR INABILITY TO USE THE LIBRARY (INCLUDING BUT NOT LIMITED TO LOSS OF DATA OR DATA BEING RENDERED INACCURATE OR LOSSES SUSTAINED BY YOU OR THIRD PARTIES OR A FAILURE OF THE LIBRARY TO OPERATE WITH ANY OTHER SOFTWARE), EVEN IF SUCH HOLDER OR OTHER PARTY HAS BEEN ADVISED OF THE POSSIBILITY OF SUCH DAMAGES. + END OF TERMS AND CONDITIONS + How to Apply These Terms to Your New Libraries + If you develop a new library, and you want it to be of the greatest possible use to the public, we recommend making it free software that everyone can redistribute and change. You can do so by permitting redistribution under these terms (or, alternatively, under the terms of the ordinary General Public License). + To apply these terms, attach the following notices to the library. It is safest to attach them to the start of each source file to most effectively convey the exclusion of warranty; and each file should have at least the "copyright" line and a pointer to where the full notice is found. + one line to give the library's name and an idea of what it does. + Copyright (C) year name of author + + This library is free software; you can redistribute it and/or + modify it under the terms of the GNU Lesser General Public + License as published by the Free Software Foundation; either + version 2.1 of the License, or (at your option) any later version. + + This library is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + Lesser General Public License for more details. + + You should have received a copy of the GNU Lesser General Public + License along with this library; if not, write to the Free Software + Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA + Also add information on how to contact you by electronic and paper mail. + You should also get your employer (if you work as a programmer) or your school, if any, to sign a "copyright disclaimer" for the library, if necessary. Here is a sample; alter the names: + Yoyodyne, Inc., hereby disclaims all copyright interest in + the library `Frob' (a library for tweaking knobs) written + by James Random Hacker. + + signature of Ty Coon, 1 April 1990 + Ty Coon, President of Vice + That's all there is to it! + GNU Library General Public License Version 2 + Version 2, June 1991 + Copyright (C) 1991 Free Software Foundation, Inc. + 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA + Everyone is permitted to copy and distribute verbatim copies + of this license document, but changing it is not allowed. + + [This is the first released version of the library GPL. It is + numbered 2 because it goes with version 2 of the ordinary GPL.] + Preamble + The licenses for most software are designed to take away your freedom to share and change it. By contrast, the GNU General Public Licenses are intended to guarantee your freedom to share and change free software--to make sure the software is free for all its users. + This license, the Library General Public License, applies to some specially designated Free Software Foundation software, and to any other libraries whose authors decide to use it. You can use it for your libraries, too. + When we speak of free software, we are referring to freedom, not price. Our General Public Licenses are designed to make sure that you have the freedom to distribute copies of free software (and charge for this service if you wish), that you receive source code or can get it if you want it, that you can change the software or use pieces of it in new free programs; and that you know you can do these things. + To protect your rights, we need to make restrictions that forbid anyone to deny you these rights or to ask you to surrender the rights. These restrictions translate to certain responsibilities for you if you distribute copies of the library, or if you modify it. + For example, if you distribute copies of the library, whether gratis or for a fee, you must give the recipients all the rights that we gave you. You must make sure that they, too, receive or can get the source code. If you link a program with the library, you must provide complete object files to the recipients so that they can relink them with the library, after making changes to the library and recompiling it. And you must show them these terms so they know their rights. + Our method of protecting your rights has two steps: (1) copyright the library, and (2) offer you this license which gives you legal permission to copy, distribute and/or modify the library. + Also, for each distributor's protection, we want to make certain that everyone understands that there is no warranty for this free library. If the library is modified by someone else and passed on, we want its recipients to know that what they have is not the original version, so that any problems introduced by others will not reflect on the original authors' reputations. + Finally, any free program is threatened constantly by software patents. We wish to avoid the danger that companies distributing free software will individually obtain patent licenses, thus in effect transforming the program into proprietary software. To prevent this, we have made it clear that any patent must be licensed for everyone's free use or not licensed at all. + Most GNU software, including some libraries, is covered by the ordinary GNU General Public License, which was designed for utility programs. This license, the GNU Library General Public License, applies to certain designated libraries. This license is quite different from the ordinary one; be sure to read it in full, and don't assume that anything in it is the same as in the ordinary license. + The reason we have a separate public license for some libraries is that they blur the distinction we usually make between modifying or adding to a program and simply using it. Linking a program with a library, without changing the library, is in some sense simply using the library, and is analogous to running a utility program or application program. However, in a textual and legal sense, the linked executable is a combined work, a derivative of the original library, and the ordinary General Public License treats it as such. + Because of this blurred distinction, using the ordinary General Public License for libraries did not effectively promote software sharing, because most developers did not use the libraries. We concluded that weaker conditions might promote sharing better. + However, unrestricted linking of non-free programs would deprive the users of those programs of all benefit from the free status of the libraries themselves. This Library General Public License is intended to permit developers of non-free programs to use free libraries, while preserving your freedom as a user of such programs to change the free libraries that are incorporated in them. (We have not seen how to achieve this as regards changes in header files, but we have achieved it as regards changes in the actual functions of the Library.) The hope is that this will lead to faster development of free libraries. + The precise terms and conditions for copying, distribution and modification follow. Pay close attention to the difference between a "work based on the library" and a "work that uses the library". The former contains code derived from the library, while the latter only works together with the library. + Note that it is possible for a library to be covered by the ordinary General Public License rather than by this special one. + TERMS AND CONDITIONS FOR COPYING, DISTRIBUTION AND MODIFICATION + 0. This License Agreement applies to any software library which contains a notice placed by the copyright holder or other authorized party saying it may be distributed under the terms of this Library General Public License (also called "this License"). Each licensee is addressed as "you". + A "library" means a collection of software functions and/or data prepared so as to be conveniently linked with application programs (which use some of those functions and data) to form executables. + The "Library", below, refers to any such software library or work which has been distributed under these terms. A "work based on the Library" means either the Library or any derivative work under copyright law: that is to say, a work containing the Library or a portion of it, either verbatim or with modifications and/or translated straightforwardly into another language. (Hereinafter, translation is included without limitation in the term "modification".) + "Source code" for a work means the preferred form of the work for making modifications to it. For a library, complete source code means all the source code for all modules it contains, plus any associated interface definition files, plus the scripts used to control compilation and installation of the library. + Activities other than copying, distribution and modification are not covered by this License; they are outside its scope. The act of running a program using the Library is not restricted, and output from such a program is covered only if its contents constitute a work based on the Library (independent of the use of the Library in a tool for writing it). Whether that is true depends on what the Library does and what the program that uses the Library does. + 1. You may copy and distribute verbatim copies of the Library's complete source code as you receive it, in any medium, provided that you conspicuously and appropriately publish on each copy an appropriate copyright notice and disclaimer of warranty; keep intact all the notices that refer to this License and to the absence of any warranty; and distribute a copy of this License along with the Library. + You may charge a fee for the physical act of transferring a copy, and you may at your option offer warranty protection in exchange for a fee. + 2. You may modify your copy or copies of the Library or any portion of it, thus forming a work based on the Library, and copy and distribute such modifications or work under the terms of Section 1 above, provided that you also meet all of these conditions: + + + a) The modified work must itself be a software library. + + + b) You must cause the files modified to carry prominent notices stating that you changed the files and the date of any change. + + + c) You must cause the whole of the work to be licensed at no charge to all third parties under the terms of this License. + + + d) If a facility in the modified Library refers to a function or a table of data to be supplied by an application program that uses the facility, other than as an argument passed when the facility is invoked, then you must make a good faith effort to ensure that, in the event an application does not supply such function or table, the facility still operates, and performs whatever part of its purpose remains meaningful. + (For example, a function in a library to compute square roots has a purpose that is entirely well-defined independent of the application. Therefore, Subsection 2d requires that any application-supplied function or table used by this function must be optional: if the application does not supply it, the square root function must still compute square roots.) + + + These requirements apply to the modified work as a whole. If identifiable sections of that work are not derived from the Library, and can be reasonably considered independent and separate works in themselves, then this License, and its terms, do not apply to those sections when you distribute them as separate works. But when you distribute the same sections as part of a whole which is a work based on the Library, the distribution of the whole must be on the terms of this License, whose permissions for other licensees extend to the entire whole, and thus to each and every part regardless of who wrote it. + Thus, it is not the intent of this section to claim rights or contest your rights to work written entirely by you; rather, the intent is to exercise the right to control the distribution of derivative or collective works based on the Library. + In addition, mere aggregation of another work not based on the Library with the Library (or with a work based on the Library) on a volume of a storage or distribution medium does not bring the other work under the scope of this License. + 3. You may opt to apply the terms of the ordinary GNU General Public License instead of this License to a given copy of the Library. To do this, you must alter all the notices that refer to this License, so that they refer to the ordinary GNU General Public License, version 2, instead of to this License. (If a newer version than version 2 of the ordinary GNU General Public License has appeared, then you can specify that version instead if you wish.) Do not make any other change in these notices. + Once this change is made in a given copy, it is irreversible for that copy, so the ordinary GNU General Public License applies to all subsequent copies and derivative works made from that copy. + This option is useful when you wish to copy part of the code of the Library into a program that is not a library. + 4. You may copy and distribute the Library (or a portion or derivative of it, under Section 2) in object code or executable form under the terms of Sections 1 and 2 above provided that you accompany it with the complete corresponding machine-readable source code, which must be distributed under the terms of Sections 1 and 2 above on a medium customarily used for software interchange. + If distribution of object code is made by offering access to copy from a designated place, then offering equivalent access to copy the source code from the same place satisfies the requirement to distribute the source code, even though third parties are not compelled to copy the source along with the object code. + 5. A program that contains no derivative of any portion of the Library, but is designed to work with the Library by being compiled or linked with it, is called a "work that uses the Library". Such a work, in isolation, is not a derivative work of the Library, and therefore falls outside the scope of this License. + However, linking a "work that uses the Library" with the Library creates an executable that is a derivative of the Library (because it contains portions of the Library), rather than a "work that uses the library". The executable is therefore covered by this License. Section 6 states terms for distribution of such executables. + When a "work that uses the Library" uses material from a header file that is part of the Library, the object code for the work may be a derivative work of the Library even though the source code is not. Whether this is true is especially significant if the work can be linked without the Library, or if the work is itself a library. The threshold for this to be true is not precisely defined by law. + If such an object file uses only numerical parameters, data structure layouts and accessors, and small macros and small inline functions (ten lines or less in length), then the use of the object file is unrestricted, regardless of whether it is legally a derivative work. (Executables containing this object code plus portions of the Library will still fall under Section 6.) + Otherwise, if the work is a derivative of the Library, you may distribute the object code for the work under the terms of Section 6. Any executables containing that work also fall under Section 6, whether or not they are linked directly with the Library itself. + 6. As an exception to the Sections above, you may also compile or link a "work that uses the Library" with the Library to produce a work containing portions of the Library, and distribute that work under terms of your choice, provided that the terms permit modification of the work for the customer's own use and reverse engineering for debugging such modifications. + You must give prominent notice with each copy of the work that the Library is used in it and that the Library and its use are covered by this License. You must supply a copy of this License. If the work during execution displays copyright notices, you must include the copyright notice for the Library among them, as well as a reference directing the user to the copy of this License. Also, you must do one of these things: + + + a) Accompany the work with the complete corresponding machine-readable source code for the Library including whatever changes were used in the work (which must be distributed under Sections 1 and 2 above); and, if the work is an executable linked with the Library, with the complete machine-readable "work that uses the Library", as object code and/or source code, so that the user can modify the Library and then relink to produce a modified executable containing the modified Library. (It is understood that the user who changes the contents of definitions files in the Library will not necessarily be able to recompile the application to use the modified definitions.) + + + b) Accompany the work with a written offer, valid for at least three years, to give the same user the materials specified in Subsection 6a, above, for a charge no more than the cost of performing this distribution. + + + c) If distribution of the work is made by offering access to copy from a designated place, offer equivalent access to copy the above specified materials from the same place. + + + d) Verify that the user has already received a copy of these materials or that you have already sent this user a copy. + + + For an executable, the required form of the "work that uses the Library" must include any data and utility programs needed for reproducing the executable from it. However, as a special exception, the source code distributed need not include anything that is normally distributed (in either source or binary form) with the major components (compiler, kernel, and so on) of the operating system on which the executable runs, unless that component itself accompanies the executable. + It may happen that this requirement contradicts the license restrictions of other proprietary libraries that do not normally accompany the operating system. Such a contradiction means you cannot use both them and the Library together in an executable that you distribute. + 7. You may place library facilities that are a work based on the Library side-by-side in a single library together with other library facilities not covered by this License, and distribute such a combined library, provided that the separate distribution of the work based on the Library and of the other library facilities is otherwise permitted, and provided that you do these two things: + + + a) Accompany the combined library with a copy of the same work based on the Library, uncombined with any other library facilities. This must be distributed under the terms of the Sections above. + + + b) Give prominent notice with the combined library of the fact that part of it is a work based on the Library, and explaining where to find the accompanying uncombined form of the same work. + + + 8. You may not copy, modify, sublicense, link with, or distribute the Library except as expressly provided under this License. Any attempt otherwise to copy, modify, sublicense, link with, or distribute the Library is void, and will automatically terminate your rights under this License. However, parties who have received copies, or rights, from you under this License will not have their licenses terminated so long as such parties remain in full compliance. + 9. You are not required to accept this License, since you have not signed it. However, nothing else grants you permission to modify or distribute the Library or its derivative works. These actions are prohibited by law if you do not accept this License. Therefore, by modifying or distributing the Library (or any work based on the Library), you indicate your acceptance of this License to do so, and all its terms and conditions for copying, distributing or modifying the Library or works based on it. + 10. Each time you redistribute the Library (or any work based on the Library), the recipient automatically receives a license from the original licensor to copy, distribute, link with or modify the Library subject to these terms and conditions. You may not impose any further restrictions on the recipients' exercise of the rights granted herein. You are not responsible for enforcing compliance by third parties to this License. + 11. If, as a consequence of a court judgment or allegation of patent infringement or for any other reason (not limited to patent issues), conditions are imposed on you (whether by court order, agreement or otherwise) that contradict the conditions of this License, they do not excuse you from the conditions of this License. If you cannot distribute so as to satisfy simultaneously your obligations under this License and any other pertinent obligations, then as a consequence you may not distribute the Library at all. For example, if a patent license would not permit royalty-free redistribution of the Library by all those who receive copies directly or indirectly through you, then the only way you could satisfy both it and this License would be to refrain entirely from distribution of the Library. + If any portion of this section is held invalid or unenforceable under any particular circumstance, the balance of the section is intended to apply, and the section as a whole is intended to apply in other circumstances. + It is not the purpose of this section to induce you to infringe any patents or other property right claims or to contest validity of any such claims; this section has the sole purpose of protecting the integrity of the free software distribution system which is implemented by public license practices. Many people have made generous contributions to the wide range of software distributed through that system in reliance on consistent application of that system; it is up to the author/donor to decide if he or she is willing to distribute software through any other system and a licensee cannot impose that choice. + This section is intended to make thoroughly clear what is believed to be a consequence of the rest of this License. + 12. If the distribution and/or use of the Library is restricted in certain countries either by patents or by copyrighted interfaces, the original copyright holder who places the Library under this License may add an explicit geographical distribution limitation excluding those countries, so that distribution is permitted only in or among countries not thus excluded. In such case, this License incorporates the limitation as if written in the body of this License. + 13. The Free Software Foundation may publish revised and/or new versions of the Library General Public License from time to time. Such new versions will be similar in spirit to the present version, but may differ in detail to address new problems or concerns. + Each version is given a distinguishing version number. If the Library specifies a version number of this License which applies to it and "any later version", you have the option of following the terms and conditions either of that version or of any later version published by the Free Software Foundation. If the Library does not specify a license version number, you may choose any version ever published by the Free Software Foundation. + 14. If you wish to incorporate parts of the Library into other free programs whose distribution conditions are incompatible with these, write to the author to ask for permission. For software which is copyrighted by the Free Software Foundation, write to the Free Software Foundation; we sometimes make exceptions for this. Our decision will be guided by the two goals of preserving the free status of all derivatives of our free software and of promoting the sharing and reuse of software generally. + NO WARRANTY + 15. BECAUSE THE LIBRARY IS LICENSED FREE OF CHARGE, THERE IS NO WARRANTY FOR THE LIBRARY, TO THE EXTENT PERMITTED BY APPLICABLE LAW. EXCEPT WHEN OTHERWISE STATED IN WRITING THE COPYRIGHT HOLDERS AND/OR OTHER PARTIES PROVIDE THE LIBRARY "AS IS" WITHOUT WARRANTY OF ANY KIND, EITHER EXPRESSED OR IMPLIED, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE. THE ENTIRE RISK AS TO THE QUALITY AND PERFORMANCE OF THE LIBRARY IS WITH YOU. SHOULD THE LIBRARY PROVE DEFECTIVE, YOU ASSUME THE COST OF ALL NECESSARY SERVICING, REPAIR OR CORRECTION. + 16. IN NO EVENT UNLESS REQUIRED BY APPLICABLE LAW OR AGREED TO IN WRITING WILL ANY COPYRIGHT HOLDER, OR ANY OTHER PARTY WHO MAY MODIFY AND/OR REDISTRIBUTE THE LIBRARY AS PERMITTED ABOVE, BE LIABLE TO YOU FOR DAMAGES, INCLUDING ANY GENERAL, SPECIAL, INCIDENTAL OR CONSEQUENTIAL DAMAGES ARISING OUT OF THE USE OR INABILITY TO USE THE LIBRARY (INCLUDING BUT NOT LIMITED TO LOSS OF DATA OR DATA BEING RENDERED INACCURATE OR LOSSES SUSTAINED BY YOU OR THIRD PARTIES OR A FAILURE OF THE LIBRARY TO OPERATE WITH ANY OTHER SOFTWARE), EVEN IF SUCH HOLDER OR OTHER PARTY HAS BEEN ADVISED OF THE POSSIBILITY OF SUCH DAMAGES. + END OF TERMS AND CONDITIONS + How to Apply These Terms to Your New Libraries + If you develop a new library, and you want it to be of the greatest possible use to the public, we recommend making it free software that everyone can redistribute and change. You can do so by permitting redistribution under these terms (or, alternatively, under the terms of the ordinary General Public License). + To apply these terms, attach the following notices to the library. It is safest to attach them to the start of each source file to most effectively convey the exclusion of warranty; and each file should have at least the "copyright" line and a pointer to where the full notice is found. + one line to give the library's name and an idea of what it does. + Copyright (C) year name of author + + This library is free software; you can redistribute it and/or + modify it under the terms of the GNU Library General Public + License as published by the Free Software Foundation; either + version 2 of the License, or (at your option) any later version. + + This library is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + Library General Public License for more details. + + You should have received a copy of the GNU Library General Public + License along with this library; if not, write to the + Free Software Foundation, Inc., 51 Franklin St, Fifth Floor, + Boston, MA 02110-1301, USA. + Also add information on how to contact you by electronic and paper mail. + You should also get your employer (if you work as a programmer) or your school, if any, to sign a "copyright disclaimer" for the library, if necessary. Here is a sample; alter the names: + Yoyodyne, Inc., hereby disclaims all copyright interest in + the library `Frob' (a library for tweaking knobs) written + by James Random Hacker. + + signature of Ty Coon, 1 April 1990 + Ty Coon, President of Vice + That's all there is to it! + GNU General Public License Version 3 + Copyright © 2007 Free Software Foundation, Inc. <http://fsf.org/> + Everyone is permitted to copy and distribute verbatim copies of this license document, but changing it is not allowed. + Preamble + The GNU General Public License is a free, copyleft license for software and other kinds of works. + The licenses for most software and other practical works are designed to take away your freedom to share and change the works. By contrast, the GNU General Public License is intended to guarantee your freedom to share and change all versions of a program--to make sure it remains free software for all its users. We, the Free Software Foundation, use the GNU General Public License for most of our software; it applies also to any other work released this way by its authors. You can apply it to your programs, too. + When we speak of free software, we are referring to freedom, not price. Our General Public Licenses are designed to make sure that you have the freedom to distribute copies of free software (and charge for them if you wish), that you receive source code or can get it if you want it, that you can change the software or use pieces of it in new free programs, and that you know you can do these things. + To protect your rights, we need to prevent others from denying you these rights or asking you to surrender the rights. Therefore, you have certain responsibilities if you distribute copies of the software, or if you modify it: responsibilities to respect the freedom of others. + For example, if you distribute copies of such a program, whether gratis or for a fee, you must pass on to the recipients the same freedoms that you received. You must make sure that they, too, receive or can get the source code. And you must show them these terms so they know their rights. + Developers that use the GNU GPL protect your rights with two steps: (1) assert copyright on the software, and (2) offer you this License giving you legal permission to copy, distribute and/or modify it. + For the developers' and authors' protection, the GPL clearly explains that there is no warranty for this free software. For both users' and authors' sake, the GPL requires that modified versions be marked as changed, so that their problems will not be attributed erroneously to authors of previous versions. + Some devices are designed to deny users access to install or run modified versions of the software inside them, although the manufacturer can do so. This is fundamentally incompatible with the aim of protecting users' freedom to change the software. The systematic pattern of such abuse occurs in the area of products for individuals to use, which is precisely where it is most unacceptable. Therefore, we have designed this version of the GPL to prohibit the practice for those products. If such problems arise substantially in other domains, we stand ready to extend this provision to those domains in future versions of the GPL, as needed to protect the freedom of users. + Finally, every program is threatened constantly by software patents. States should not allow patents to restrict development and use of software on general-purpose computers, but in those that do, we wish to avoid the special danger that patents applied to a free program could make it effectively proprietary. To prevent this, the GPL assures that patents cannot be used to render the program non-free. + The precise terms and conditions for copying, distribution and modification follow. + TERMS AND CONDITIONS + 0. Definitions. + “This License” refers to version 3 of the GNU General Public License. + “Copyright” also means copyright-like laws that apply to other kinds of works, such as semiconductor masks. + “The Program” refers to any copyrightable work licensed under this License. Each licensee is addressed as “you”. “Licensees” and “recipients” may be individuals or organizations. + To “modify” a work means to copy from or adapt all or part of the work in a fashion requiring copyright permission, other than the making of an exact copy. The resulting work is called a “modified version” of the earlier work or a work “based on” the earlier work. + A “covered work” means either the unmodified Program or a work based on the Program. + To “propagate” a work means to do anything with it that, without permission, would make you directly or secondarily liable for infringement under applicable copyright law, except executing it on a computer or modifying a private copy. Propagation includes copying, distribution (with or without modification), making available to the public, and in some countries other activities as well. + To “convey” a work means any kind of propagation that enables other parties to make or receive copies. Mere interaction with a user through a computer network, with no transfer of a copy, is not conveying. + An interactive user interface displays “Appropriate Legal Notices” to the extent that it includes a convenient and prominently visible feature that (1) displays an appropriate copyright notice, and (2) tells the user that there is no warranty for the work (except to the extent that warranties are provided), that licensees may convey the work under this License, and how to view a copy of this License. If the interface presents a list of user commands or options, such as a menu, a prominent item in the list meets this criterion. + 1. Source Code. + The “source code” for a work means the preferred form of the work for making modifications to it. “Object code” means any non-source form of a work. + A “Standard Interface” means an interface that either is an official standard defined by a recognized standards body, or, in the case of interfaces specified for a particular programming language, one that is widely used among developers working in that language. + The “System Libraries” of an executable work include anything, other than the work as a whole, that (a) is included in the normal form of packaging a Major Component, but which is not part of that Major Component, and (b) serves only to enable use of the work with that Major Component, or to implement a Standard Interface for which an implementation is available to the public in source code form. A “Major Component”, in this context, means a major essential component (kernel, window system, and so on) of the specific operating system (if any) on which the executable work runs, or a compiler used to produce the work, or an object code interpreter used to run it. + The “Corresponding Source” for a work in object code form means all the source code needed to generate, install, and (for an executable work) run the object code and to modify the work, including scripts to control those activities. However, it does not include the work's System Libraries, or general-purpose tools or generally available free programs which are used unmodified in performing those activities but which are not part of the work. For example, Corresponding Source includes interface definition files associated with source files for the work, and the source code for shared libraries and dynamically linked subprograms that the work is specifically designed to require, such as by intimate data communication or control flow between those subprograms and other parts of the work. + The Corresponding Source need not include anything that users can regenerate automatically from other parts of the Corresponding Source. + The Corresponding Source for a work in source code form is that same work. + 2. Basic Permissions. + All rights granted under this License are granted for the term of copyright on the Program, and are irrevocable provided the stated conditions are met. This License explicitly affirms your unlimited permission to run the unmodified Program. The output from running a covered work is covered by this License only if the output, given its content, constitutes a covered work. This License acknowledges your rights of fair use or other equivalent, as provided by copyright law. + You may make, run and propagate covered works that you do not convey, without conditions so long as your license otherwise remains in force. You may convey covered works to others for the sole purpose of having them make modifications exclusively for you, or provide you with facilities for running those works, provided that you comply with the terms of this License in conveying all material for which you do not control copyright. Those thus making or running the covered works for you must do so exclusively on your behalf, under your direction and control, on terms that prohibit them from making any copies of your copyrighted material outside their relationship with you. + Conveying under any other circumstances is permitted solely under the conditions stated below. Sublicensing is not allowed; section 10 makes it unnecessary. + 3. Protecting Users' Legal Rights From Anti-Circumvention Law. + No covered work shall be deemed part of an effective technological measure under any applicable law fulfilling obligations under article 11 of the WIPO copyright treaty adopted on 20 December 1996, or similar laws prohibiting or restricting circumvention of such measures. + When you convey a covered work, you waive any legal power to forbid circumvention of technological measures to the extent such circumvention is effected by exercising rights under this License with respect to the covered work, and you disclaim any intention to limit operation or modification of the work as a means of enforcing, against the work's users, your or third parties' legal rights to forbid circumvention of technological measures. + 4. Conveying Verbatim Copies. + You may convey verbatim copies of the Program's source code as you receive it, in any medium, provided that you conspicuously and appropriately publish on each copy an appropriate copyright notice; keep intact all notices stating that this License and any non-permissive terms added in accord with section 7 apply to the code; keep intact all notices of the absence of any warranty; and give all recipients a copy of this License along with the Program. + You may charge any price or no price for each copy that you convey, and you may offer support or warranty protection for a fee. + 5. Conveying Modified Source Versions. + You may convey a work based on the Program, or the modifications to produce it from the Program, in the form of source code under the terms of section 4, provided that you also meet all of these conditions: + + + a) The work must carry prominent notices stating that you modified it, and giving a relevant date. + + + b) The work must carry prominent notices stating that it is released under this License and any conditions added under section 7. This requirement modifies the requirement in section 4 to “keep intact all notices”. + + + c) You must license the entire work, as a whole, under this License to anyone who comes into possession of a copy. This License will therefore apply, along with any applicable section 7 additional terms, to the whole of the work, and all its parts, regardless of how they are packaged. This License gives no permission to license the work in any other way, but it does not invalidate such permission if you have separately received it. + + + d) If the work has interactive user interfaces, each must display Appropriate Legal Notices; however, if the Program has interactive interfaces that do not display Appropriate Legal Notices, your work need not make them do so. + + + A compilation of a covered work with other separate and independent works, which are not by their nature extensions of the covered work, and which are not combined with it such as to form a larger program, in or on a volume of a storage or distribution medium, is called an “aggregate” if the compilation and its resulting copyright are not used to limit the access or legal rights of the compilation's users beyond what the individual works permit. Inclusion of a covered work in an aggregate does not cause this License to apply to the other parts of the aggregate. + 6. Conveying Non-Source Forms. + You may convey a covered work in object code form under the terms of sections 4 and 5, provided that you also convey the machine-readable Corresponding Source under the terms of this License, in one of these ways: + + + a) Convey the object code in, or embodied in, a physical product (including a physical distribution medium), accompanied by the Corresponding Source fixed on a durable physical medium customarily used for software interchange. + + + b) Convey the object code in, or embodied in, a physical product (including a physical distribution medium), accompanied by a written offer, valid for at least three years and valid for as long as you offer spare parts or customer support for that product model, to give anyone who possesses the object code either (1) a copy of the Corresponding Source for all the software in the product that is covered by this License, on a durable physical medium customarily used for software interchange, for a price no more than your reasonable cost of physically performing this conveying of source, or (2) access to copy the Corresponding Source from a network server at no charge. + + + c) Convey individual copies of the object code with a copy of the written offer to provide the Corresponding Source. This alternative is allowed only occasionally and noncommercially, and only if you received the object code with such an offer, in accord with subsection 6b. + + + d) Convey the object code by offering access from a designated place (gratis or for a charge), and offer equivalent access to the Corresponding Source in the same way through the same place at no further charge. You need not require recipients to copy the Corresponding Source along with the object code. If the place to copy the object code is a network server, the Corresponding Source may be on a different server (operated by you or a third party) that supports equivalent copying facilities, provided you maintain clear directions next to the object code saying where to find the Corresponding Source. Regardless of what server hosts the Corresponding Source, you remain obligated to ensure that it is available for as long as needed to satisfy these requirements. + + + e) Convey the object code using peer-to-peer transmission, provided you inform other peers where the object code and Corresponding Source of the work are being offered to the general public at no charge under subsection 6d. + + + A separable portion of the object code, whose source code is excluded from the Corresponding Source as a System Library, need not be included in conveying the object code work. + A “User Product” is either (1) a “consumer product”, which means any tangible personal property which is normally used for personal, family, or household purposes, or (2) anything designed or sold for incorporation into a dwelling. In determining whether a product is a consumer product, doubtful cases shall be resolved in favor of coverage. For a particular product received by a particular user, “normally used” refers to a typical or common use of that class of product, regardless of the status of the particular user or of the way in which the particular user actually uses, or expects or is expected to use, the product. A product is a consumer product regardless of whether the product has substantial commercial, industrial or non-consumer uses, unless such uses represent the only significant mode of use of the product. + “Installation Information” for a User Product means any methods, procedures, authorization keys, or other information required to install and execute modified versions of a covered work in that User Product from a modified version of its Corresponding Source. The information must suffice to ensure that the continued functioning of the modified object code is in no case prevented or interfered with solely because modification has been made. + If you convey an object code work under this section in, or with, or specifically for use in, a User Product, and the conveying occurs as part of a transaction in which the right of possession and use of the User Product is transferred to the recipient in perpetuity or for a fixed term (regardless of how the transaction is characterized), the Corresponding Source conveyed under this section must be accompanied by the Installation Information. But this requirement does not apply if neither you nor any third party retains the ability to install modified object code on the User Product (for example, the work has been installed in ROM). + The requirement to provide Installation Information does not include a requirement to continue to provide support service, warranty, or updates for a work that has been modified or installed by the recipient, or for the User Product in which it has been modified or installed. Access to a network may be denied when the modification itself materially and adversely affects the operation of the network or violates the rules and protocols for communication across the network. + Corresponding Source conveyed, and Installation Information provided, in accord with this section must be in a format that is publicly documented (and with an implementation available to the public in source code form), and must require no special password or key for unpacking, reading or copying. + 7. Additional Terms. + “Additional permissions” are terms that supplement the terms of this License by making exceptions from one or more of its conditions. Additional permissions that are applicable to the entire Program shall be treated as though they were included in this License, to the extent that they are valid under applicable law. If additional permissions apply only to part of the Program, that part may be used separately under those permissions, but the entire Program remains governed by this License without regard to the additional permissions. + When you convey a copy of a covered work, you may at your option remove any additional permissions from that copy, or from any part of it. (Additional permissions may be written to require their own removal in certain cases when you modify the work.) You may place additional permissions on material, added by you to a covered work, for which you have or can give appropriate copyright permission. + Notwithstanding any other provision of this License, for material you add to a covered work, you may (if authorized by the copyright holders of that material) supplement the terms of this License with terms: + + + a) Disclaiming warranty or limiting liability differently from the terms of sections 15 and 16 of this License; or + + + b) Requiring preservation of specified reasonable legal notices or author attributions in that material or in the Appropriate Legal Notices displayed by works containing it; or + + + c) Prohibiting misrepresentation of the origin of that material, or requiring that modified versions of such material be marked in reasonable ways as different from the original version; or + + + d) Limiting the use for publicity purposes of names of licensors or authors of the material; or + + + e) Declining to grant rights under trademark law for use of some trade names, trademarks, or service marks; or + + + f) Requiring indemnification of licensors and authors of that material by anyone who conveys the material (or modified versions of it) with contractual assumptions of liability to the recipient, for any liability that these contractual assumptions directly impose on those licensors and authors. + + + All other non-permissive additional terms are considered “further restrictions” within the meaning of section 10. If the Program as you received it, or any part of it, contains a notice stating that it is governed by this License along with a term that is a further restriction, you may remove that term. If a license document contains a further restriction but permits relicensing or conveying under this License, you may add to a covered work material governed by the terms of that license document, provided that the further restriction does not survive such relicensing or conveying. + If you add terms to a covered work in accord with this section, you must place, in the relevant source files, a statement of the additional terms that apply to those files, or a notice indicating where to find the applicable terms. + Additional terms, permissive or non-permissive, may be stated in the form of a separately written license, or stated as exceptions; the above requirements apply either way. + 8. Termination. + You may not propagate or modify a covered work except as expressly provided under this License. Any attempt otherwise to propagate or modify it is void, and will automatically terminate your rights under this License (including any patent licenses granted under the third paragraph of section 11). + However, if you cease all violation of this License, then your license from a particular copyright holder is reinstated (a) provisionally, unless and until the copyright holder explicitly and finally terminates your license, and (b) permanently, if the copyright holder fails to notify you of the violation by some reasonable means prior to 60 days after the cessation. + Moreover, your license from a particular copyright holder is reinstated permanently if the copyright holder notifies you of the violation by some reasonable means, this is the first time you have received notice of violation of this License (for any work) from that copyright holder, and you cure the violation prior to 30 days after your receipt of the notice. + Termination of your rights under this section does not terminate the licenses of parties who have received copies or rights from you under this License. If your rights have been terminated and not permanently reinstated, you do not qualify to receive new licenses for the same material under section 10. + 9. Acceptance Not Required for Having Copies. + You are not required to accept this License in order to receive or run a copy of the Program. Ancillary propagation of a covered work occurring solely as a consequence of using peer-to-peer transmission to receive a copy likewise does not require acceptance. However, nothing other than this License grants you permission to propagate or modify any covered work. These actions infringe copyright if you do not accept this License. Therefore, by modifying or propagating a covered work, you indicate your acceptance of this License to do so. + 10. Automatic Licensing of Downstream Recipients. + Each time you convey a covered work, the recipient automatically receives a license from the original licensors, to run, modify and propagate that work, subject to this License. You are not responsible for enforcing compliance by third parties with this License. + An “entity transaction” is a transaction transferring control of an organization, or substantially all assets of one, or subdividing an organization, or merging organizations. If propagation of a covered work results from an entity transaction, each party to that transaction who receives a copy of the work also receives whatever licenses to the work the party's predecessor in interest had or could give under the previous paragraph, plus a right to possession of the Corresponding Source of the work from the predecessor in interest, if the predecessor has it or can get it with reasonable efforts. + You may not impose any further restrictions on the exercise of the rights granted or affirmed under this License. For example, you may not impose a license fee, royalty, or other charge for exercise of rights granted under this License, and you may not initiate litigation (including a cross-claim or counterclaim in a lawsuit) alleging that any patent claim is infringed by making, using, selling, offering for sale, or importing the Program or any portion of it. + 11. Patents. + A “contributor” is a copyright holder who authorizes use under this License of the Program or a work on which the Program is based. The work thus licensed is called the contributor's “contributor version”. + A contributor's “essential patent claims” are all patent claims owned or controlled by the contributor, whether already acquired or hereafter acquired, that would be infringed by some manner, permitted by this License, of making, using, or selling its contributor version, but do not include claims that would be infringed only as a consequence of further modification of the contributor version. For purposes of this definition, “control” includes the right to grant patent sublicenses in a manner consistent with the requirements of this License. + Each contributor grants you a non-exclusive, worldwide, royalty-free patent license under the contributor's essential patent claims, to make, use, sell, offer for sale, import and otherwise run, modify and propagate the contents of its contributor version. + In the following three paragraphs, a “patent license” is any express agreement or commitment, however denominated, not to enforce a patent (such as an express permission to practice a patent or covenant not to sue for patent infringement). To “grant” such a patent license to a party means to make such an agreement or commitment not to enforce a patent against the party. + If you convey a covered work, knowingly relying on a patent license, and the Corresponding Source of the work is not available for anyone to copy, free of charge and under the terms of this License, through a publicly available network server or other readily accessible means, then you must either (1) cause the Corresponding Source to be so available, or (2) arrange to deprive yourself of the benefit of the patent license for this particular work, or (3) arrange, in a manner consistent with the requirements of this License, to extend the patent license to downstream recipients. “Knowingly relying” means you have actual knowledge that, but for the patent license, your conveying the covered work in a country, or your recipient's use of the covered work in a country, would infringe one or more identifiable patents in that country that you have reason to believe are valid. + If, pursuant to or in connection with a single transaction or arrangement, you convey, or propagate by procuring conveyance of, a covered work, and grant a patent license to some of the parties receiving the covered work authorizing them to use, propagate, modify or convey a specific copy of the covered work, then the patent license you grant is automatically extended to all recipients of the covered work and works based on it. + A patent license is “discriminatory” if it does not include within the scope of its coverage, prohibits the exercise of, or is conditioned on the non-exercise of one or more of the rights that are specifically granted under this License. You may not convey a covered work if you are a party to an arrangement with a third party that is in the business of distributing software, under which you make payment to the third party based on the extent of your activity of conveying the work, and under which the third party grants, to any of the parties who would receive the covered work from you, a discriminatory patent license (a) in connection with copies of the covered work conveyed by you (or copies made from those copies), or (b) primarily for and in connection with specific products or compilations that contain the covered work, unless you entered into that arrangement, or that patent license was granted, prior to 28 March 2007. + Nothing in this License shall be construed as excluding or limiting any implied license or other defenses to infringement that may otherwise be available to you under applicable patent law. + 12. No Surrender of Others' Freedom. + If conditions are imposed on you (whether by court order, agreement or otherwise) that contradict the conditions of this License, they do not excuse you from the conditions of this License. If you cannot convey a covered work so as to satisfy simultaneously your obligations under this License and any other pertinent obligations, then as a consequence you may not convey it at all. For example, if you agree to terms that obligate you to collect a royalty for further conveying from those to whom you convey the Program, the only way you could satisfy both those terms and this License would be to refrain entirely from conveying the Program. + 13. Use with the GNU Affero General Public License. + Notwithstanding any other provision of this License, you have permission to link or combine any covered work with a work licensed under version 3 of the GNU Affero General Public License into a single combined work, and to convey the resulting work. The terms of this License will continue to apply to the part which is the covered work, but the special requirements of the GNU Affero General Public License, section 13, concerning interaction through a network will apply to the combination as such. + 14. Revised Versions of this License. + The Free Software Foundation may publish revised and/or new versions of the GNU General Public License from time to time. Such new versions will be similar in spirit to the present version, but may differ in detail to address new problems or concerns. + Each version is given a distinguishing version number. If the Program specifies that a certain numbered version of the GNU General Public License “or any later version” applies to it, you have the option of following the terms and conditions either of that numbered version or of any later version published by the Free Software Foundation. If the Program does not specify a version number of the GNU General Public License, you may choose any version ever published by the Free Software Foundation. + If the Program specifies that a proxy can decide which future versions of the GNU General Public License can be used, that proxy's public statement of acceptance of a version permanently authorizes you to choose that version for the Program. + Later license versions may give you additional or different permissions. However, no additional obligations are imposed on any author or copyright holder as a result of your choosing to follow a later version. + 15. Disclaimer of Warranty. + THERE IS NO WARRANTY FOR THE PROGRAM, TO THE EXTENT PERMITTED BY APPLICABLE LAW. EXCEPT WHEN OTHERWISE STATED IN WRITING THE COPYRIGHT HOLDERS AND/OR OTHER PARTIES PROVIDE THE PROGRAM “AS IS” WITHOUT WARRANTY OF ANY KIND, EITHER EXPRESSED OR IMPLIED, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE. THE ENTIRE RISK AS TO THE QUALITY AND PERFORMANCE OF THE PROGRAM IS WITH YOU. SHOULD THE PROGRAM PROVE DEFECTIVE, YOU ASSUME THE COST OF ALL NECESSARY SERVICING, REPAIR OR CORRECTION. + 16. Limitation of Liability. + IN NO EVENT UNLESS REQUIRED BY APPLICABLE LAW OR AGREED TO IN WRITING WILL ANY COPYRIGHT HOLDER, OR ANY OTHER PARTY WHO MODIFIES AND/OR CONVEYS THE PROGRAM AS PERMITTED ABOVE, BE LIABLE TO YOU FOR DAMAGES, INCLUDING ANY GENERAL, SPECIAL, INCIDENTAL OR CONSEQUENTIAL DAMAGES ARISING OUT OF THE USE OR INABILITY TO USE THE PROGRAM (INCLUDING BUT NOT LIMITED TO LOSS OF DATA OR DATA BEING RENDERED INACCURATE OR LOSSES SUSTAINED BY YOU OR THIRD PARTIES OR A FAILURE OF THE PROGRAM TO OPERATE WITH ANY OTHER PROGRAMS), EVEN IF SUCH HOLDER OR OTHER PARTY HAS BEEN ADVISED OF THE POSSIBILITY OF SUCH DAMAGES. + 17. Interpretation of Sections 15 and 16. + If the disclaimer of warranty and limitation of liability provided above cannot be given local legal effect according to their terms, reviewing courts shall apply local law that most closely approximates an absolute waiver of all civil liability in connection with the Program, unless a warranty or assumption of liability accompanies a copy of the Program in return for a fee. + END OF TERMS AND CONDITIONS + How to Apply These Terms to Your New Programs + If you develop a new program, and you want it to be of the greatest possible use to the public, the best way to achieve this is to make it free software which everyone can redistribute and change under these terms. + To do so, attach the following notices to the program. It is safest to attach them to the start of each source file to most effectively state the exclusion of warranty; and each file should have at least the “copyright” line and a pointer to where the full notice is found. + <one line to give the program's name and a brief idea of what it does.> + Copyright (C) <year> <name of author> + + This program is free software: you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation, either version 3 of the License, or + (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with this program. If not, see <http://www.gnu.org/licenses/>. + Also add information on how to contact you by electronic and paper mail. + If the program does terminal interaction, make it output a short notice like this when it starts in an interactive mode: + <program> Copyright (C) <year> <name of author> + This program comes with ABSOLUTELY NO WARRANTY; for details type `show w'. + This is free software, and you are welcome to redistribute it + under certain conditions; type `show c' for details. + The hypothetical commands `show w' and `show c' should show the appropriate parts of the General Public License. Of course, your program's commands might be different; for a GUI interface, you would use an “about box”. + You should also get your employer (if you work as a programmer) or school, if any, to sign a “copyright disclaimer” for the program, if necessary. For more information on this, and how to apply and follow the GNU GPL, see <http://www.gnu.org/licenses/>. + The GNU General Public License does not permit incorporating your program into proprietary programs. If your program is a subroutine library, you may consider it more useful to permit linking proprietary applications with the library. If this is what you want to do, use the GNU Lesser General Public License instead of this License. But first, please read <http://www.gnu.org/philosophy/why-not-lgpl.html>. + + GNU General Public License Version 2 + Copyright (C) 1989, 1991 Free Software Foundation, Inc. + 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA + Everyone is permitted to copy and distribute verbatim copies + of this license document, but changing it is not allowed. + Preamble + The licenses for most software are designed to take away your freedom to share and change it. By contrast, the GNU General Public License is intended to guarantee your freedom to share and change free software--to make sure the software is free for all its users. This General Public License applies to most of the Free Software Foundation's software and to any other program whose authors commit to using it. (Some other Free Software Foundation software is covered by the GNU Lesser General Public License instead.) You can apply it to your programs, too. + When we speak of free software, we are referring to freedom, not price. Our General Public Licenses are designed to make sure that you have the freedom to distribute copies of free software (and charge for this service if you wish), that you receive source code or can get it if you want it, that you can change the software or use pieces of it in new free programs; and that you know you can do these things. + To protect your rights, we need to make restrictions that forbid anyone to deny you these rights or to ask you to surrender the rights. These restrictions translate to certain responsibilities for you if you distribute copies of the software, or if you modify it. + For example, if you distribute copies of such a program, whether gratis or for a fee, you must give the recipients all the rights that you have. You must make sure that they, too, receive or can get the source code. And you must show them these terms so they know their rights. + We protect your rights with two steps: (1) copyright the software, and (2) offer you this license which gives you legal permission to copy, distribute and/or modify the software. + Also, for each author's protection and ours, we want to make certain that everyone understands that there is no warranty for this free software. If the software is modified by someone else and passed on, we want its recipients to know that what they have is not the original, so that any problems introduced by others will not reflect on the original authors' reputations. + Finally, any free program is threatened constantly by software patents. We wish to avoid the danger that redistributors of a free program will individually obtain patent licenses, in effect making the program proprietary. To prevent this, we have made it clear that any patent must be licensed for everyone's free use or not licensed at all. + The precise terms and conditions for copying, distribution and modification follow. + TERMS AND CONDITIONS FOR COPYING, DISTRIBUTION AND MODIFICATION + 0. This License applies to any program or other work which contains a notice placed by the copyright holder saying it may be distributed under the terms of this General Public License. The "Program", below, refers to any such program or work, and a "work based on the Program" means either the Program or any derivative work under copyright law: that is to say, a work containing the Program or a portion of it, either verbatim or with modifications and/or translated into another language. (Hereinafter, translation is included without limitation in the term "modification".) Each licensee is addressed as "you". + Activities other than copying, distribution and modification are not covered by this License; they are outside its scope. The act of running the Program is not restricted, and the output from the Program is covered only if its contents constitute a work based on the Program (independent of having been made by running the Program). Whether that is true depends on what the Program does. + 1. You may copy and distribute verbatim copies of the Program's source code as you receive it, in any medium, provided that you conspicuously and appropriately publish on each copy an appropriate copyright notice and disclaimer of warranty; keep intact all the notices that refer to this License and to the absence of any warranty; and give any other recipients of the Program a copy of this License along with the Program. + You may charge a fee for the physical act of transferring a copy, and you may at your option offer warranty protection in exchange for a fee. + 2. You may modify your copy or copies of the Program or any portion of it, thus forming a work based on the Program, and copy and distribute such modifications or work under the terms of Section 1 above, provided that you also meet all of these conditions: + a) You must cause the modified files to carry prominent notices stating that you changed the files and the date of any change. + b) You must cause any work that you distribute or publish, that in whole or in part contains or is derived from the Program or any part thereof, to be licensed as a whole at no charge to all third parties under the terms of this License. + c) If the modified program normally reads commands interactively when run, you must cause it, when started running for such interactive use in the most ordinary way, to print or display an announcement including an appropriate copyright notice and a notice that there is no warranty (or else, saying that you provide a warranty) and that users may redistribute the program under these conditions, and telling the user how to view a copy of this License. (Exception: if the Program itself is interactive but does not normally print such an announcement, your work based on the Program is not required to print an announcement.) + These requirements apply to the modified work as a whole. If identifiable sections of that work are not derived from the Program, and can be reasonably considered independent and separate works in themselves, then this License, and its terms, do not apply to those sections when you distribute them as separate works. But when you distribute the same sections as part of a whole which is a work based on the Program, the distribution of the whole must be on the terms of this License, whose permissions for other licensees extend to the entire whole, and thus to each and every part regardless of who wrote it. + Thus, it is not the intent of this section to claim rights or contest your rights to work written entirely by you; rather, the intent is to exercise the right to control the distribution of derivative or collective works based on the Program. + In addition, mere aggregation of another work not based on the Program with the Program (or with a work based on the Program) on a volume of a storage or distribution medium does not bring the other work under the scope of this License. + 3. You may copy and distribute the Program (or a work based on it, under Section 2) in object code or executable form under the terms of Sections 1 and 2 above provided that you also do one of the following: + a) Accompany it with the complete corresponding machine-readable source code, which must be distributed under the terms of Sections 1 and 2 above on a medium customarily used for software interchange; or, + b) Accompany it with a written offer, valid for at least three years, to give any third party, for a charge no more than your cost of physically performing source distribution, a complete machine-readable copy of the corresponding source code, to be distributed under the terms of Sections 1 and 2 above on a medium customarily used for software interchange; or, + c) Accompany it with the information you received as to the offer to distribute corresponding source code. (This alternative is allowed only for noncommercial distribution and only if you received the program in object code or executable form with such an offer, in accord with Subsection b above.) + The source code for a work means the preferred form of the work for making modifications to it. For an executable work, complete source code means all the source code for all modules it contains, plus any associated interface definition files, plus the scripts used to control compilation and installation of the executable. However, as a special exception, the source code distributed need not include anything that is normally distributed (in either source or binary form) with the major components (compiler, kernel, and so on) of the operating system on which the executable runs, unless that component itself accompanies the executable. + If distribution of executable or object code is made by offering access to copy from a designated place, then offering equivalent access to copy the source code from the same place counts as distribution of the source code, even though third parties are not compelled to copy the source along with the object code. + 4. You may not copy, modify, sublicense, or distribute the Program except as expressly provided under this License. Any attempt otherwise to copy, modify, sublicense or distribute the Program is void, and will automatically terminate your rights under this License. However, parties who have received copies, or rights, from you under this License will not have their licenses terminated so long as such parties remain in full compliance. + 5. You are not required to accept this License, since you have not signed it. However, nothing else grants you permission to modify or distribute the Program or its derivative works. These actions are prohibited by law if you do not accept this License. Therefore, by modifying or distributing the Program (or any work based on the Program), you indicate your acceptance of this License to do so, and all its terms and conditions for copying, distributing or modifying the Program or works based on it. + 6. Each time you redistribute the Program (or any work based on the Program), the recipient automatically receives a license from the original licensor to copy, distribute or modify the Program subject to these terms and conditions. You may not impose any further restrictions on the recipients' exercise of the rights granted herein. You are not responsible for enforcing compliance by third parties to this License. + 7. If, as a consequence of a court judgment or allegation of patent infringement or for any other reason (not limited to patent issues), conditions are imposed on you (whether by court order, agreement or otherwise) that contradict the conditions of this License, they do not excuse you from the conditions of this License. If you cannot distribute so as to satisfy simultaneously your obligations under this License and any other pertinent obligations, then as a consequence you may not distribute the Program at all. For example, if a patent license would not permit royalty-free redistribution of the Program by all those who receive copies directly or indirectly through you, then the only way you could satisfy both it and this License would be to refrain entirely from distribution of the Program. + If any portion of this section is held invalid or unenforceable under any particular circumstance, the balance of the section is intended to apply and the section as a whole is intended to apply in other circumstances. + It is not the purpose of this section to induce you to infringe any patents or other property right claims or to contest validity of any such claims; this section has the sole purpose of protecting the integrity of the free software distribution system, which is implemented by public license practices. Many people have made generous contributions to the wide range of software distributed through that system in reliance on consistent application of that system; it is up to the author/donor to decide if he or she is willing to distribute software through any other system and a licensee cannot impose that choice. + This section is intended to make thoroughly clear what is believed to be a consequence of the rest of this License. + 8. If the distribution and/or use of the Program is restricted in certain countries either by patents or by copyrighted interfaces, the original copyright holder who places the Program under this License may add an explicit geographical distribution limitation excluding those countries, so that distribution is permitted only in or among countries not thus excluded. In such case, this License incorporates the limitation as if written in the body of this License. + 9. The Free Software Foundation may publish revised and/or new versions of the General Public License from time to time. Such new versions will be similar in spirit to the present version, but may differ in detail to address new problems or concerns. + Each version is given a distinguishing version number. If the Program specifies a version number of this License which applies to it and "any later version", you have the option of following the terms and conditions either of that version or of any later version published by the Free Software Foundation. If the Program does not specify a version number of this License, you may choose any version ever published by the Free Software Foundation. + 10. If you wish to incorporate parts of the Program into other free programs whose distribution conditions are different, write to the author to ask for permission. For software which is copyrighted by the Free Software Foundation, write to the Free Software Foundation; we sometimes make exceptions for this. Our decision will be guided by the two goals of preserving the free status of all derivatives of our free software and of promoting the sharing and reuse of software generally. + NO WARRANTY + 11. BECAUSE THE PROGRAM IS LICENSED FREE OF CHARGE, THERE IS NO WARRANTY FOR THE PROGRAM, TO THE EXTENT PERMITTED BY APPLICABLE LAW. EXCEPT WHEN OTHERWISE STATED IN WRITING THE COPYRIGHT HOLDERS AND/OR OTHER PARTIES PROVIDE THE PROGRAM "AS IS" WITHOUT WARRANTY OF ANY KIND, EITHER EXPRESSED OR IMPLIED, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE. THE ENTIRE RISK AS TO THE QUALITY AND PERFORMANCE OF THE PROGRAM IS WITH YOU. SHOULD THE PROGRAM PROVE DEFECTIVE, YOU ASSUME THE COST OF ALL NECESSARY SERVICING, REPAIR OR CORRECTION. + 12. IN NO EVENT UNLESS REQUIRED BY APPLICABLE LAW OR AGREED TO IN WRITING WILL ANY COPYRIGHT HOLDER, OR ANY OTHER PARTY WHO MAY MODIFY AND/OR REDISTRIBUTE THE PROGRAM AS PERMITTED ABOVE, BE LIABLE TO YOU FOR DAMAGES, INCLUDING ANY GENERAL, SPECIAL, INCIDENTAL OR CONSEQUENTIAL DAMAGES ARISING OUT OF THE USE OR INABILITY TO USE THE PROGRAM (INCLUDING BUT NOT LIMITED TO LOSS OF DATA OR DATA BEING RENDERED INACCURATE OR LOSSES SUSTAINED BY YOU OR THIRD PARTIES OR A FAILURE OF THE PROGRAM TO OPERATE WITH ANY OTHER PROGRAMS), EVEN IF SUCH HOLDER OR OTHER PARTY HAS BEEN ADVISED OF THE POSSIBILITY OF SUCH DAMAGES. + END OF TERMS AND CONDITIONS + How to Apply These Terms to Your New Programs + If you develop a new program, and you want it to be of the greatest possible use to the public, the best way to achieve this is to make it free software which everyone can redistribute and change under these terms. + To do so, attach the following notices to the program. It is safest to attach them to the start of each source file to most effectively convey the exclusion of warranty; and each file should have at least the "copyright" line and a pointer to where the full notice is found. + one line to give the program's name and an idea of what it does. + Copyright (C) yyyy name of author + + This program is free software; you can redistribute it and/or + modify it under the terms of the GNU General Public License + as published by the Free Software Foundation; either version 2 + of the License, or (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with this program; if not, write to the Free Software + Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. + Also add information on how to contact you by electronic and paper mail. + If the program is interactive, make it output a short notice like this when it starts in an interactive mode: + Gnomovision version 69, Copyright (C) year name of author + Gnomovision comes with ABSOLUTELY NO WARRANTY; for details + type `show w'. This is free software, and you are welcome + to redistribute it under certain conditions; type `show c' + for details. + The hypothetical commands `show w' and `show c' should show the appropriate parts of the General Public License. Of course, the commands you use may be called something other than `show w' and `show c'; they could even be mouse-clicks or menu items--whatever suits your program. + You should also get your employer (if you work as a programmer) or your school, if any, to sign a "copyright disclaimer" for the program, if necessary. Here is a sample; alter the names: + Yoyodyne, Inc., hereby disclaims all copyright + interest in the program `Gnomovision' + (which makes passes at compilers) written + by James Hacker. + + signature of Ty Coon, 1 April 1989 + Ty Coon, President of Vice + This General Public License does not permit incorporating your program into proprietary programs. If your program is a subroutine library, you may consider it more useful to permit linking proprietary applications with the library. If this is what you want to do, use the GNU Lesser General Public License instead of this License. + Mozilla Public License Version 1.1 + 1. Definitions. + 1.0.1. "Commercial Use" + means distribution or otherwise making the Covered Code available to a third party. + 1.1. "Contributor" + means each entity that creates or contributes to the creation of Modifications. + 1.2. "Contributor Version" + means the combination of the Original Code, prior Modifications used by a Contributor, and the Modifications made by that particular Contributor. + 1.3. "Covered Code" + means the Original Code or Modifications or the combination of the Original Code and Modifications, in each case including portions thereof. + 1.4. "Electronic Distribution Mechanism" + means a mechanism generally accepted in the software development community for the electronic transfer of data. + 1.5. "Executable" + means Covered Code in any form other than Source Code. + 1.6. "Initial Developer" + means the individual or entity identified as the Initial Developer in the Source Code notice required by Exhibit A. + 1.7. "Larger Work" + means a work which combines Covered Code or portions thereof with code not governed by the terms of this License. + 1.8. "License" + means this document. + 1.8.1. "Licensable" + means having the right to grant, to the maximum extent possible, whether at the time of the initial grant or subsequently acquired, any and all of the rights conveyed herein. + 1.9. "Modifications" + means any addition to or deletion from the substance or structure of either the Original Code or any previous Modifications. When Covered Code is released as a series of files, a Modification is: + + + Any addition to or deletion from the contents of a file containing Original Code or previous Modifications. + + + Any new file that contains any part of the Original Code or previous Modifications. + + + 1.10. "Original Code" + means Source Code of computer software code which is described in the Source Code notice required by Exhibit A as Original Code, and which, at the time of its release under this License is not already Covered Code governed by this License. + 1.10.1. "Patent Claims" + means any patent claim(s), now owned or hereafter acquired, including without limitation, method, process, and apparatus claims, in any patent Licensable by grantor. + 1.11. "Source Code" + means the preferred form of the Covered Code for making modifications to it, including all modules it contains, plus any associated interface definition files, scripts used to control compilation and installation of an Executable, or source code differential comparisons against either the Original Code or another well known, available Covered Code of the Contributor's choice. The Source Code can be in a compressed or archival form, provided the appropriate decompression or de-archiving software is widely available for no charge. + 1.12. "You" (or "Your") + means an individual or a legal entity exercising rights under, and complying with all of the terms of, this License or a future version of this License issued under Section 6.1. For legal entities, "You" includes any entity which controls, is controlled by, or is under common control with You. For purposes of this definition, "control" means (a) the power, direct or indirect, to cause the direction or management of such entity, whether by contract or otherwise, or (b) ownership of more than fifty percent (50%) of the outstanding shares or beneficial ownership of such entity. + 2. Source Code License. + 2.1. The Initial Developer Grant. + The Initial Developer hereby grants You a world-wide, royalty-free, non-exclusive license, subject to third party intellectual property claims: + + + under intellectual property rights (other than patent or trademark) Licensable by Initial Developer to use, reproduce, modify, display, perform, sublicense and distribute the Original Code (or portions thereof) with or without Modifications, and/or as part of a Larger Work; and + + + under Patents Claims infringed by the making, using or selling of Original Code, to make, have made, use, practice, sell, and offer for sale, and/or otherwise dispose of the Original Code (or portions thereof). + + + the licenses granted in this Section 2.1 (a) and (b) are effective on the date Initial Developer first distributes Original Code under the terms of this License. + + + Notwithstanding Section 2.1 (b) above, no patent license is granted: 1) for code that You delete from the Original Code; 2) separate from the Original Code; or 3) for infringements caused by: i) the modification of the Original Code or ii) the combination of the Original Code with other software or devices. + + + 2.2. Contributor Grant. + Subject to third party intellectual property claims, each Contributor hereby grants You a world-wide, royalty-free, non-exclusive license + + + under intellectual property rights (other than patent or trademark) Licensable by Contributor, to use, reproduce, modify, display, perform, sublicense and distribute the Modifications created by such Contributor (or portions thereof) either on an unmodified basis, with other Modifications, as Covered Code and/or as part of a Larger Work; and + + + under Patent Claims infringed by the making, using, or selling of Modifications made by that Contributor either alone and/or in combination with its Contributor Version (or portions of such combination), to make, use, sell, offer for sale, have made, and/or otherwise dispose of: 1) Modifications made by that Contributor (or portions thereof); and 2) the combination of Modifications made by that Contributor with its Contributor Version (or portions of such combination). + + + the licenses granted in Sections 2.2 (a) and 2.2 (b) are effective on the date Contributor first makes Commercial Use of the Covered Code. + + + Notwithstanding Section 2.2 (b) above, no patent license is granted: 1) for any code that Contributor has deleted from the Contributor Version; 2) separate from the Contributor Version; 3) for infringements caused by: i) third party modifications of Contributor Version or ii) the combination of Modifications made by that Contributor with other software (except as part of the Contributor Version) or other devices; or 4) under Patent Claims infringed by Covered Code in the absence of Modifications made by that Contributor. + + + 3. Distribution Obligations. + 3.1. Application of License. + The Modifications which You create or to which You contribute are governed by the terms of this License, including without limitation Section 2.2. The Source Code version of Covered Code may be distributed only under the terms of this License or a future version of this License released under Section 6.1, and You must include a copy of this License with every copy of the Source Code You distribute. You may not offer or impose any terms on any Source Code version that alters or restricts the applicable version of this License or the recipients' rights hereunder. However, You may include an additional document offering the additional rights described in Section 3.5. + 3.2. Availability of Source Code. + Any Modification which You create or to which You contribute must be made available in Source Code form under the terms of this License either on the same media as an Executable version or via an accepted Electronic Distribution Mechanism to anyone to whom you made an Executable version available; and if made available via Electronic Distribution Mechanism, must remain available for at least twelve (12) months after the date it initially became available, or at least six (6) months after a subsequent version of that particular Modification has been made available to such recipients. You are responsible for ensuring that the Source Code version remains available even if the Electronic Distribution Mechanism is maintained by a third party. + 3.3. Description of Modifications. + You must cause all Covered Code to which You contribute to contain a file documenting the changes You made to create that Covered Code and the date of any change. You must include a prominent statement that the Modification is derived, directly or indirectly, from Original Code provided by the Initial Developer and including the name of the Initial Developer in (a) the Source Code, and (b) in any notice in an Executable version or related documentation in which You describe the origin or ownership of the Covered Code. + 3.4. Intellectual Property Matters + (a) Third Party Claims + If Contributor has knowledge that a license under a third party's intellectual property rights is required to exercise the rights granted by such Contributor under Sections 2.1 or 2.2, Contributor must include a text file with the Source Code distribution titled "LEGAL" which describes the claim and the party making the claim in sufficient detail that a recipient will know whom to contact. If Contributor obtains such knowledge after the Modification is made available as described in Section 3.2, Contributor shall promptly modify the LEGAL file in all copies Contributor makes available thereafter and shall take other steps (such as notifying appropriate mailing lists or newsgroups) reasonably calculated to inform those who received the Covered Code that new knowledge has been obtained. + (b) Contributor APIs + If Contributor's Modifications include an application programming interface and Contributor has knowledge of patent licenses which are reasonably necessary to implement that API, Contributor must also include this information in the legal file. + (c) Representations. + Contributor represents that, except as disclosed pursuant to Section 3.4 (a) above, Contributor believes that Contributor's Modifications are Contributor's original creation(s) and/or Contributor has sufficient rights to grant the rights conveyed by this License. + 3.5. Required Notices. + You must duplicate the notice in Exhibit A in each file of the Source Code. If it is not possible to put such notice in a particular Source Code file due to its structure, then You must include such notice in a location (such as a relevant directory) where a user would be likely to look for such a notice. If You created one or more Modification(s) You may add your name as a Contributor to the notice described in Exhibit A. You must also duplicate this License in any documentation for the Source Code where You describe recipients' rights or ownership rights relating to Covered Code. You may choose to offer, and to charge a fee for, warranty, support, indemnity or liability obligations to one or more recipients of Covered Code. However, You may do so only on Your own behalf, and not on behalf of the Initial Developer or any Contributor. You must make it absolutely clear than any such warranty, support, indemnity or liability obligation is offered by You alone, and You hereby agree to indemnify the Initial Developer and every Contributor for any liability incurred by the Initial Developer or such Contributor as a result of warranty, support, indemnity or liability terms You offer. + 3.6. Distribution of Executable Versions. + You may distribute Covered Code in Executable form only if the requirements of Sections 3.1, 3.2, 3.3, 3.4 and 3.5 have been met for that Covered Code, and if You include a notice stating that the Source Code version of the Covered Code is available under the terms of this License, including a description of how and where You have fulfilled the obligations of Section 3.2. The notice must be conspicuously included in any notice in an Executable version, related documentation or collateral in which You describe recipients' rights relating to the Covered Code. You may distribute the Executable version of Covered Code or ownership rights under a license of Your choice, which may contain terms different from this License, provided that You are in compliance with the terms of this License and that the license for the Executable version does not attempt to limit or alter the recipient's rights in the Source Code version from the rights set forth in this License. If You distribute the Executable version under a different license You must make it absolutely clear that any terms which differ from this License are offered by You alone, not by the Initial Developer or any Contributor. You hereby agree to indemnify the Initial Developer and every Contributor for any liability incurred by the Initial Developer or such Contributor as a result of any such terms You offer. + 3.7. Larger Works. + You may create a Larger Work by combining Covered Code with other code not governed by the terms of this License and distribute the Larger Work as a single product. In such a case, You must make sure the requirements of this License are fulfilled for the Covered Code. + 4. Inability to Comply Due to Statute or Regulation. + If it is impossible for You to comply with any of the terms of this License with respect to some or all of the Covered Code due to statute, judicial order, or regulation then You must: (a) comply with the terms of this License to the maximum extent possible; and (b) describe the limitations and the code they affect. Such description must be included in the legal file described in Section 3.4 and must be included with all distributions of the Source Code. Except to the extent prohibited by statute or regulation, such description must be sufficiently detailed for a recipient of ordinary skill to be able to understand it. + 5. Application of this License. + This License applies to code to which the Initial Developer has attached the notice in Exhibit A and to related Covered Code. + 6. Versions of the License. + 6.1. New Versions + Netscape Communications Corporation ("Netscape") may publish revised and/or new versions of the License from time to time. Each version will be given a distinguishing version number. + 6.2. Effect of New Versions + Once Covered Code has been published under a particular version of the License, You may always continue to use it under the terms of that version. You may also choose to use such Covered Code under the terms of any subsequent version of the License published by Netscape. No one other than Netscape has the right to modify the terms applicable to Covered Code created under this License. + 6.3. Derivative Works + If You create or use a modified version of this License (which you may only do in order to apply it to code which is not already Covered Code governed by this License), You must (a) rename Your license so that the phrases "Mozilla", "MOZILLAPL", "MOZPL", "Netscape", "MPL", "NPL" or any confusingly similar phrase do not appear in your license (except to note that your license differs from this License) and (b) otherwise make it clear that Your version of the license contains terms which differ from the Mozilla Public License and Netscape Public License. (Filling in the name of the Initial Developer, Original Code or Contributor in the notice described in Exhibit A shall not of themselves be deemed to be modifications of this License.) + 7. Disclaimer of warranty + Covered code is provided under this license on an "as is" basis, without warranty of any kind, either expressed or implied, including, without limitation, warranties that the covered code is free of defects, merchantable, fit for a particular purpose or non-infringing. The entire risk as to the quality and performance of the covered code is with you. Should any covered code prove defective in any respect, you (not the initial developer or any other contributor) assume the cost of any necessary servicing, repair or correction. This disclaimer of warranty constitutes an essential part of this license. No use of any covered code is authorized hereunder except under this disclaimer. + 8. Termination + 8.1. This License and the rights granted hereunder will terminate automatically if You fail to comply with terms herein and fail to cure such breach within 30 days of becoming aware of the breach. All sublicenses to the Covered Code which are properly granted shall survive any termination of this License. Provisions which, by their nature, must remain in effect beyond the termination of this License shall survive. + 8.2. If You initiate litigation by asserting a patent infringement claim (excluding declaratory judgment actions) against Initial Developer or a Contributor (the Initial Developer or Contributor against whom You file such action is referred to as "Participant") alleging that: + + + such Participant's Contributor Version directly or indirectly infringes any patent, then any and all rights granted by such Participant to You under Sections 2.1 and/or 2.2 of this License shall, upon 60 days notice from Participant terminate prospectively, unless if within 60 days after receipt of notice You either: (i) agree in writing to pay Participant a mutually agreeable reasonable royalty for Your past and future use of Modifications made by such Participant, or (ii) withdraw Your litigation claim with respect to the Contributor Version against such Participant. If within 60 days of notice, a reasonable royalty and payment arrangement are not mutually agreed upon in writing by the parties or the litigation claim is not withdrawn, the rights granted by Participant to You under Sections 2.1 and/or 2.2 automatically terminate at the expiration of the 60 day notice period specified above. + + + any software, hardware, or device, other than such Participant's Contributor Version, directly or indirectly infringes any patent, then any rights granted to You by such Participant under Sections 2.1(b) and 2.2(b) are revoked effective as of the date You first made, used, sold, distributed, or had made, Modifications made by that Participant. + + + 8.3. If You assert a patent infringement claim against Participant alleging that such Participant's Contributor Version directly or indirectly infringes any patent where such claim is resolved (such as by license or settlement) prior to the initiation of patent infringement litigation, then the reasonable value of the licenses granted by such Participant under Sections 2.1 or 2.2 shall be taken into account in determining the amount or value of any payment or license. + 8.4. In the event of termination under Sections 8.1 or 8.2 above, all end user license agreements (excluding distributors and resellers) which have been validly granted by You or any distributor hereunder prior to termination shall survive termination. + 9. Limitation of liability + Under no circumstances and under no legal theory, whether tort (including negligence), contract, or otherwise, shall you, the initial developer, any other contributor, or any distributor of covered code, or any supplier of any of such parties, be liable to any person for any indirect, special, incidental, or consequential damages of any character including, without limitation, damages for loss of goodwill, work stoppage, computer failure or malfunction, or any and all other commercial damages or losses, even if such party shall have been informed of the possibility of such damages. This limitation of liability shall not apply to liability for death or personal injury resulting from such party's negligence to the extent applicable law prohibits such limitation. Some jurisdictions do not allow the exclusion or limitation of incidental or consequential damages, so this exclusion and limitation may not apply to you. + 10. U.S. government end users + The Covered Code is a "commercial item," as that term is defined in 48 C.F.R. 2.101 (Oct. 1995), consisting of "commercial computer software" and "commercial computer software documentation," as such terms are used in 48 C.F.R. 12.212 (Sept. 1995). Consistent with 48 C.F.R. 12.212 and 48 C.F.R. 227.7202-1 through 227.7202-4 (June 1995), all U.S. Government End Users acquire Covered Code with only those rights set forth herein. + 11. Miscellaneous + This License represents the complete agreement concerning subject matter hereof. If any provision of this License is held to be unenforceable, such provision shall be reformed only to the extent necessary to make it enforceable. This License shall be governed by California law provisions (except to the extent applicable law, if any, provides otherwise), excluding its conflict-of-law provisions. With respect to disputes in which at least one party is a citizen of, or an entity chartered or registered to do business in the United States of America, any litigation relating to this License shall be subject to the jurisdiction of the Federal Courts of the Northern District of California, with venue lying in Santa Clara County, California, with the losing party responsible for costs, including without limitation, court costs and reasonable attorneys' fees and expenses. The application of the United Nations Convention on Contracts for the International Sale of Goods is expressly excluded. Any law or regulation which provides that the language of a contract shall be construed against the drafter shall not apply to this License. + 12. Responsibility for claims + As between Initial Developer and the Contributors, each party is responsible for claims and damages arising, directly or indirectly, out of its utilization of rights under this License and You agree to work with Initial Developer and Contributors to distribute such responsibility on an equitable basis. Nothing herein is intended or shall be deemed to constitute any admission of liability. + 13. Multiple-licensed code + Initial Developer may designate portions of the Covered Code as "Multiple-Licensed". "Multiple-Licensed" means that the Initial Developer permits you to utilize portions of the Covered Code under Your choice of the MPL or the alternative licenses, if any, specified by the Initial Developer in the file described in Exhibit A. + Exhibit A - Mozilla Public License. + "The contents of this file are subject to the Mozilla Public License + Version 1.1 (the "License"); you may not use this file except in + compliance with the License. You may obtain a copy of the License at + http://www.mozilla.org/MPL/ + + Software distributed under the License is distributed on an "AS IS" + basis, WITHOUT WARRANTY OF ANY KIND, either express or implied. See the + License for the specific language governing rights and limitations + under the License. + + The Original Code is ______________________________________. + + The Initial Developer of the Original Code is ________________________. + Portions created by ______________________ are Copyright (C) ______ + _______________________. All Rights Reserved. + + Contributor(s): ______________________________________. + + Alternatively, the contents of this file may be used under the terms + of the _____ license (the "[___] License"), in which case the + provisions of [______] License are applicable instead of those + above. If you wish to allow use of your version of this file only + under the terms of the [____] License and not to allow others to use + your version of this file under the MPL, indicate your decision by + deleting the provisions above and replace them with the notice and + other provisions required by the [___] License. If you do not delete + the provisions above, a recipient may use your version of this file + under either the MPL or the [___] License." + NOTE: The text of this Exhibit A may differ slightly from the text of the notices in the Source Code files of the Original Code. You should use the text of this Exhibit A rather than the text found in the Original Code Source Code for Your Modifications. + Mozilla Public License Version 2.0 + 1. Definitions + 1.1. “Contributor” + means each individual or legal entity that creates, contributes to the creation of, or owns Covered Software. + 1.2. “Contributor Version” + means the combination of the Contributions of others (if any) used by a Contributor and that particular Contributor’s Contribution. + 1.3. “Contribution” + means Covered Software of a particular Contributor. + 1.4. “Covered Software” + means Source Code Form to which the initial Contributor has attached the notice in Exhibit A, the Executable Form of such Source Code Form, and Modifications of such Source Code Form, in each case including portions thereof. + 1.5. “Incompatible With Secondary Licenses” + means + + + that the initial Contributor has attached the notice described in Exhibit B to the Covered Software; or + + + that the Covered Software was made available under the terms of version 1.1 or earlier of the License, but not also under the terms of a Secondary License. + + + 1.6. “Executable Form” + means any form of the work other than Source Code Form. + 1.7. “Larger Work” + means a work that combines Covered Software with other material, in a separate file or files, that is not Covered Software. + 1.8. “License” + means this document. + 1.9. “Licensable” + means having the right to grant, to the maximum extent possible, whether at the time of the initial grant or subsequently, any and all of the rights conveyed by this License. + 1.10. “Modifications” + means any of the following: + + + any file in Source Code Form that results from an addition to, deletion from, or modification of the contents of Covered Software; or + + + any new file in Source Code Form that contains any Covered Software. + + + 1.11. “Patent Claims” of a Contributor + means any patent claim(s), including without limitation, method, process, and apparatus claims, in any patent Licensable by such Contributor that would be infringed, but for the grant of the License, by the making, using, selling, offering for sale, having made, import, or transfer of either its Contributions or its Contributor Version. + 1.12. “Secondary License” + means either the GNU General Public License, Version 2.0, the GNU Lesser General Public License, Version 2.1, the GNU Affero General Public License, Version 3.0, or any later versions of those licenses. + 1.13. “Source Code Form” + means the form of the work preferred for making modifications. + 1.14. “You” (or “Your”) + means an individual or a legal entity exercising rights under this License. For legal entities, “You” includes any entity that controls, is controlled by, or is under common control with You. For purposes of this definition, “control” means (a) the power, direct or indirect, to cause the direction or management of such entity, whether by contract or otherwise, or (b) ownership of more than fifty percent (50%) of the outstanding shares or beneficial ownership of such entity. + 2. License Grants and Conditions + 2.1. Grants + Each Contributor hereby grants You a world-wide, royalty-free, non-exclusive license: + + + under intellectual property rights (other than patent or trademark) Licensable by such Contributor to use, reproduce, make available, modify, display, perform, distribute, and otherwise exploit its Contributions, either on an unmodified basis, with Modifications, or as part of a Larger Work; and + + + under Patent Claims of such Contributor to make, use, sell, offer for sale, have made, import, and otherwise transfer either its Contributions or its Contributor Version. + + + 2.2. Effective Date + The licenses granted in Section 2.1 with respect to any Contribution become effective for each Contribution on the date the Contributor first distributes such Contribution. + 2.3. Limitations on Grant Scope + The licenses granted in this Section 2 are the only rights granted under this License. No additional rights or licenses will be implied from the distribution or licensing of Covered Software under this License. Notwithstanding Section 2.1(b) above, no patent license is granted by a Contributor: + + + for any code that a Contributor has removed from Covered Software; or + + + for infringements caused by: (i) Your and any other third party’s modifications of Covered Software, or (ii) the combination of its Contributions with other software (except as part of its Contributor Version); or + + + under Patent Claims infringed by Covered Software in the absence of its Contributions. + + + This License does not grant any rights in the trademarks, service marks, or logos of any Contributor (except as may be necessary to comply with the notice requirements in Section 3.4). + 2.4. Subsequent Licenses + No Contributor makes additional grants as a result of Your choice to distribute the Covered Software under a subsequent version of this License (see Section 10.2) or under the terms of a Secondary License (if permitted under the terms of Section 3.3). + 2.5. Representation + Each Contributor represents that the Contributor believes its Contributions are its original creation(s) or it has sufficient rights to grant the rights to its Contributions conveyed by this License. + 2.6. Fair Use + This License is not intended to limit any rights You have under applicable copyright doctrines of fair use, fair dealing, or other equivalents. + 2.7. Conditions + Sections 3.1, 3.2, 3.3, and 3.4 are conditions of the licenses granted in Section 2.1. + 3. Responsibilities + 3.1. Distribution of Source Form + All distribution of Covered Software in Source Code Form, including any Modifications that You create or to which You contribute, must be under the terms of this License. You must inform recipients that the Source Code Form of the Covered Software is governed by the terms of this License, and how they can obtain a copy of this License. You may not attempt to alter or restrict the recipients’ rights in the Source Code Form. + 3.2. Distribution of Executable Form + If You distribute Covered Software in Executable Form then: + + + such Covered Software must also be made available in Source Code Form, as described in Section 3.1, and You must inform recipients of the Executable Form how they can obtain a copy of such Source Code Form by reasonable means in a timely manner, at a charge no more than the cost of distribution to the recipient; and + + + You may distribute such Executable Form under the terms of this License, or sublicense it under different terms, provided that the license for the Executable Form does not attempt to limit or alter the recipients’ rights in the Source Code Form under this License. + + + 3.3. Distribution of a Larger Work + You may create and distribute a Larger Work under terms of Your choice, provided that You also comply with the requirements of this License for the Covered Software. If the Larger Work is a combination of Covered Software with a work governed by one or more Secondary Licenses, and the Covered Software is not Incompatible With Secondary Licenses, this License permits You to additionally distribute such Covered Software under the terms of such Secondary License(s), so that the recipient of the Larger Work may, at their option, further distribute the Covered Software under the terms of either this License or such Secondary License(s). + 3.4. Notices + You may not remove or alter the substance of any license notices (including copyright notices, patent notices, disclaimers of warranty, or limitations of liability) contained within the Source Code Form of the Covered Software, except that You may alter any license notices to the extent required to remedy known factual inaccuracies. + 3.5. Application of Additional Terms + You may choose to offer, and to charge a fee for, warranty, support, indemnity or liability obligations to one or more recipients of Covered Software. However, You may do so only on Your own behalf, and not on behalf of any Contributor. You must make it absolutely clear that any such warranty, support, indemnity, or liability obligation is offered by You alone, and You hereby agree to indemnify every Contributor for any liability incurred by such Contributor as a result of warranty, support, indemnity or liability terms You offer. You may include additional disclaimers of warranty and limitations of liability specific to any jurisdiction. + 4. Inability to Comply Due to Statute or Regulation + If it is impossible for You to comply with any of the terms of this License with respect to some or all of the Covered Software due to statute, judicial order, or regulation then You must: (a) comply with the terms of this License to the maximum extent possible; and (b) describe the limitations and the code they affect. Such description must be placed in a text file included with all distributions of the Covered Software under this License. Except to the extent prohibited by statute or regulation, such description must be sufficiently detailed for a recipient of ordinary skill to be able to understand it. + 5. Termination + 5.1. The rights granted under this License will terminate automatically if You fail to comply with any of its terms. However, if You become compliant, then the rights granted under this License from a particular Contributor are reinstated (a) provisionally, unless and until such Contributor explicitly and finally terminates Your grants, and (b) on an ongoing basis, if such Contributor fails to notify You of the non-compliance by some reasonable means prior to 60 days after You have come back into compliance. Moreover, Your grants from a particular Contributor are reinstated on an ongoing basis if such Contributor notifies You of the non-compliance by some reasonable means, this is the first time You have received notice of non-compliance with this License from such Contributor, and You become compliant prior to 30 days after Your receipt of the notice. + 5.2. If You initiate litigation against any entity by asserting a patent infringement claim (excluding declaratory judgment actions, counter-claims, and cross-claims) alleging that a Contributor Version directly or indirectly infringes any patent, then the rights granted to You by any and all Contributors for the Covered Software under Section 2.1 of this License shall terminate. + 5.3. In the event of termination under Sections 5.1 or 5.2 above, all end user license agreements (excluding distributors and resellers) which have been validly granted by You or Your distributors under this License prior to termination shall survive termination. + 6. Disclaimer of Warranty + Covered Software is provided under this License on an “as is” basis, without warranty of any kind, either expressed, implied, or statutory, including, without limitation, warranties that the Covered Software is free of defects, merchantable, fit for a particular purpose or non-infringing. The entire risk as to the quality and performance of the Covered Software is with You. Should any Covered Software prove defective in any respect, You (not any Contributor) assume the cost of any necessary servicing, repair, or correction. This disclaimer of warranty constitutes an essential part of this License. No use of any Covered Software is authorized under this License except under this disclaimer. + 7. Limitation of Liability + Under no circumstances and under no legal theory, whether tort (including negligence), contract, or otherwise, shall any Contributor, or anyone who distributes Covered Software as permitted above, be liable to You for any direct, indirect, special, incidental, or consequential damages of any character including, without limitation, damages for lost profits, loss of goodwill, work stoppage, computer failure or malfunction, or any and all other commercial damages or losses, even if such party shall have been informed of the possibility of such damages. This limitation of liability shall not apply to liability for death or personal injury resulting from such party’s negligence to the extent applicable law prohibits such limitation. Some jurisdictions do not allow the exclusion or limitation of incidental or consequential damages, so this exclusion and limitation may not apply to You. + 8. Litigation + Any litigation relating to this License may be brought only in the courts of a jurisdiction where the defendant maintains its principal place of business and such litigation shall be governed by laws of that jurisdiction, without reference to its conflict-of-law provisions. Nothing in this Section shall prevent a party’s ability to bring cross-claims or counter-claims. + 9. Miscellaneous + This License represents the complete agreement concerning the subject matter hereof. If any provision of this License is held to be unenforceable, such provision shall be reformed only to the extent necessary to make it enforceable. Any law or regulation which provides that the language of a contract shall be construed against the drafter shall not be used to construe this License against a Contributor. + 10. Versions of the License + 10.1. New Versions + Mozilla Foundation is the license steward. Except as provided in Section 10.3, no one other than the license steward has the right to modify or publish new versions of this License. Each version will be given a distinguishing version number. + 10.2. Effect of New Versions + You may distribute the Covered Software under the terms of the version of the License under which You originally received the Covered Software, or under the terms of any subsequent version published by the license steward. + 10.3. Modified Versions + If you create software not governed by this License, and you want to create a new license for such software, you may create and use a modified version of this License if you rename the license and remove any references to the name of the license steward (except to note that such modified license differs from this License). + 10.4. Distributing Source Code Form that is Incompatible With Secondary Licenses + If You choose to distribute Source Code Form that is Incompatible With Secondary Licenses under the terms of this version of the License, the notice described in Exhibit B of this License must be attached. + Exhibit A - Source Code Form License Notice + This Source Code Form is subject to the terms of the Mozilla Public License, v. 2.0. If a copy of the MPL was not distributed with this file, You can obtain one at http://mozilla.org/MPL/2.0/. + If it is not possible or desirable to put the notice in a particular file, then You may include the notice in a location (such as a LICENSE file in a relevant directory) where a recipient would be likely to look for such a notice. + You may add additional accurate notices of copyright ownership. + Exhibit B - “Incompatible With Secondary Licenses” Notice + This Source Code Form is “Incompatible With Secondary Licenses”, as defined by the Mozilla Public License, v. 2.0. + SIL Open Font License Version 1.1 – 26 February 2007 + PREAMBLE The goals of the Open Font License (OFL) are to stimulate worldwide development of collaborative font projects, to support the font creation efforts of academic and linguistic communities, and to provide a free and open framework in which fonts may be shared and improved in partnership with others. + The OFL allows the licensed fonts to be used, studied, modified and redistributed freely as long as they are not sold by themselves. The fonts, including any derivative works, can be bundled, embedded, redistributed and/or sold with any software provided that the font names of derivative works are changed. The fonts and derivatives, however, cannot be released under any other type of license. The requirement for fonts to remain under this license does not apply to any document created using the fonts or their derivatives. + DEFINITIONS "Font Software" refers to the set of files released by the Copyright Holder(s) under this license and clearly marked as such. This may include source files, build scripts and documentation. + "Reserved Font Name" refers to any names specified as such after the copyright statement(s). + "Original Version" refers to the collection of Font Software components as distributed by the Copyright Holder(s). + "Modified Version" refers to any derivative made by adding to, deleting, or substituting – in part or in whole -- any of the components of the Original Version, by changing formats or by porting the Font Software to a new environment. + "Author" refers to any designer, engineer, programmer, technical writer or other person who contributed to the Font Software. + PERMISSION & CONDITIONS Permission is hereby granted, free of charge, to any person obtaining a copy of the Font Software, to use, study, copy, merge, embed, modify, redistribute, and sell modified and unmodified copies of the Font Software, subject to the following conditions: + 1) Neither the Font Software nor any of its individual components, in Original or Modified Versions, may be sold by itself. + 2) Original or Modified Versions of the Font Software may be bundled, redistributed and/or sold with any software, provided that each copy contains the above copyright notice and this license. These can be included either as stand-alone text files, human-readable headers or in the appropriate machine-readable metadata fields within text or binary files as long as those fields can be easily viewed by the user. + 3) No Modified Version of the Font Software may use the Reserved Font Name(s) unless explicit written permission is granted by the corresponding Copyright Holder. This restriction only applies to the primary font name as presented to the users. + 4) The name(s) of the Copyright Holder(s) or the Author(s) of the Font Software shall not be used to promote, endorse or advertise any Modified Version, except to acknowledge the contribution(s) of the Copyright Holder(s) and the Author(s) or with their explicit written permission. + 5) The Font Software, modified or unmodified, in part or in whole, must be distributed entirely under this license, and must not be distributed under any other license. The requirement for fonts to remain under this license does not apply to any document created using the Font Software. + TERMINATION This license becomes null and void if any of the above conditions are not met. + DISCLAIMER THE FONT SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO ANY WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT OF COPYRIGHT, PATENT, TRADEMARK, OR OTHER RIGHT. IN NO EVENT SHALL THE COPYRIGHT HOLDER BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, INCLUDING ANY GENERAL, SPECIAL, INDIRECT, INCIDENTAL, OR CONSEQUENTIAL DAMAGES, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF THE USE OR INABILITY TO USE THE FONT SOFTWARE OR FROM OTHER DEALINGS IN THE FONT SOFTWARE. + Apache License + Version 2.0, January 2004 + TERMS AND CONDITIONS FOR USE, REPRODUCTION, AND DISTRIBUTION + 1. Definitions. + "License" shall mean the terms and conditions for use, reproduction, and distribution as defined by Sections 1 through 9 of this document. + "Licensor" shall mean the copyright owner or entity authorized by the copyright owner that is granting the License. + "Legal Entity" shall mean the union of the acting entity and all other entities that control, are controlled by, or are under common control with that entity. For the purposes of this definition, "control" means (i) the power, direct or indirect, to cause the direction or management of such entity, whether by contract or otherwise, or (ii) ownership of fifty percent (50%) or more of the outstanding shares, or (iii) beneficial ownership of such entity. + "You" (or "Your") shall mean an individual or Legal Entity exercising permissions granted by this License. + "Source" form shall mean the preferred form for making modifications, including but not limited to software source code, documentation source, and configuration files. + "Object" form shall mean any form resulting from mechanical transformation or translation of a Source form, including but not limited to compiled object code, generated documentation, and conversions to other media types. + "Work" shall mean the work of authorship, whether in Source or Object form, made available under the License, as indicated by a copyright notice that is included in or attached to the work (an example is provided in the Appendix below). + "Derivative Works" shall mean any work, whether in Source or Object form, that is based on (or derived from) the Work and for which the editorial revisions, annotations, elaborations, or other modifications represent, as a whole, an original work of authorship. For the purposes of this License, Derivative Works shall not include works that remain separable from, or merely link (or bind by name) to the interfaces of, the Work and Derivative Works thereof. + "Contribution" shall mean any work of authorship, including the original version of the Work and any modifications or additions to that Work or Derivative Works thereof, that is intentionally submitted to Licensor for inclusion in the Work by the copyright owner or by an individual or Legal Entity authorized to submit on behalf of the copyright owner. For the purposes of this definition, "submitted" means any form of electronic, verbal, or written communication sent to the Licensor or its representatives, including but not limited to communication on electronic mailing lists, source code control systems, and issue tracking systems that are managed by, or on behalf of, the Licensor for the purpose of discussing and improving the Work, but excluding communication that is conspicuously marked or otherwise designated in writing by the copyright owner as "Not a Contribution." + "Contributor" shall mean Licensor and any individual or Legal Entity on behalf of whom a Contribution has been received by Licensor and subsequently incorporated within the Work. + 2. Grant of Copyright License. Subject to the terms and conditions of this License, each Contributor hereby grants to You a perpetual, worldwide, non-exclusive, no-charge, royalty-free, irrevocable copyright license to reproduce, prepare Derivative Works of, publicly display, publicly perform, sublicense, and distribute the Work and such Derivative Works in Source or Object form. + 3. Grant of Patent License. Subject to the terms and conditions of this License, each Contributor hereby grants to You a perpetual, worldwide, non-exclusive, no-charge, royalty-free, irrevocable (except as stated in this section) patent license to make, have made, use, offer to sell, sell, import, and otherwise transfer the Work, where such license applies only to those patent claims licensable by such Contributor that are necessarily infringed by their Contribution(s) alone or by combination of their Contribution(s) with the Work to which such Contribution(s) was submitted. If You institute patent litigation against any entity (including a cross-claim or counterclaim in a lawsuit) alleging that the Work or a Contribution incorporated within the Work constitutes direct or contributory patent infringement, then any patent licenses granted to You under this License for that Work shall terminate as of the date such litigation is filed. + 4. Redistribution. You may reproduce and distribute copies of the Work or Derivative Works thereof in any medium, with or without modifications, and in Source or Object form, provided that You meet the following conditions: + + + You must give any other recipients of the Work or Derivative Works a copy of this License; and + + + You must cause any modified files to carry prominent notices stating that You changed the files; and + + + You must retain, in the Source form of any Derivative Works that You distribute, all copyright, patent, trademark, and attribution notices from the Source form of the Work, excluding those notices that do not pertain to any part of the Derivative Works; and + + + If the Work includes a "NOTICE" text file as part of its distribution, then any Derivative Works that You distribute must include a readable copy of the attribution notices contained within such NOTICE file, excluding those notices that do not pertain to any part of the Derivative Works, in at least one of the following places: within a NOTICE text file distributed as part of the Derivative Works; within the Source form or documentation, if provided along with the Derivative Works; or, within a display generated by the Derivative Works, if and wherever such third-party notices normally appear. The contents of the NOTICE file are for informational purposes only and do not modify the License. You may add Your own attribution notices within Derivative Works that You distribute, alongside or as an addendum to the NOTICE text from the Work, provided that such additional attribution notices cannot be construed as modifying the License. You may add Your own copyright statement to Your modifications and may provide additional or different license terms and conditions for use, reproduction, or distribution of Your modifications, or for any such Derivative Works as a whole, provided Your use, reproduction, and distribution of the Work otherwise complies with the conditions stated in this License. + + + 5. Submission of Contributions. Unless You explicitly state otherwise, any Contribution intentionally submitted for inclusion in the Work by You to the Licensor shall be under the terms and conditions of this License, without any additional terms or conditions. Notwithstanding the above, nothing herein shall supersede or modify the terms of any separate license agreement you may have executed with Licensor regarding such Contributions. + 6. Trademarks. This License does not grant permission to use the trade names, trademarks, service marks, or product names of the Licensor, except as required for reasonable and customary use in describing the origin of the Work and reproducing the content of the NOTICE file. + 7. Disclaimer of Warranty. Unless required by applicable law or agreed to in writing, Licensor provides the Work (and each Contributor provides its Contributions) on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied, including, without limitation, any warranties or conditions of TITLE, NON-INFRINGEMENT, MERCHANTABILITY, or FITNESS FOR A PARTICULAR PURPOSE. You are solely responsible for determining the appropriateness of using or redistributing the Work and assume any risks associated with Your exercise of permissions under this License. + 8. Limitation of Liability. In no event and under no legal theory, whether in tort (including negligence), contract, or otherwise, unless required by applicable law (such as deliberate and grossly negligent acts) or agreed to in writing, shall any Contributor be liable to You for damages, including any direct, indirect, special, incidental, or consequential damages of any character arising as a result of this License or out of the use or inability to use the Work (including but not limited to damages for loss of goodwill, work stoppage, computer failure or malfunction, or any and all other commercial damages or losses), even if such Contributor has been advised of the possibility of such damages. + 9. Accepting Warranty or Additional Liability. While redistributing the Work or Derivative Works thereof, You may choose to offer, and charge a fee for, acceptance of support, warranty, indemnity, or other liability obligations and/or rights consistent with this License. However, in accepting such obligations, You may act only on Your own behalf and on Your sole responsibility, not on behalf of any other Contributor, and only if You agree to indemnify, defend, and hold each Contributor harmless for any liability incurred by, or claims asserted against, such Contributor by reason of your accepting any such warranty or additional liability. + END OF TERMS AND CONDITIONS + APPENDIX: How to apply the Apache License to your work + To apply the Apache License to your work, attach the following boilerplate notice, with the fields enclosed by brackets "[]" replaced with your own identifying information. (Don't include the brackets!) The text should be enclosed in the appropriate comment syntax for the file format. We also recommend that a file or class name and description of purpose be included on the same "printed page" as the copyright notice for easier identification within third-party archives. + Copyright [yyyy] [name of copyright owner] + + Licensed under the Apache License, Version 2.0 (the "License"); + you may not use this file except in compliance with the License. + You may obtain a copy of the License at + + http://www.apache.org/licenses/LICENSE-2.0 + + Unless required by applicable law or agreed to in writing, software + distributed under the License is distributed on an "AS IS" BASIS, + WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + See the License for the specific language governing permissions and + limitations under the License. + The LaTeX Project Public License + + LPPL Version 1.3c 2008-05-04 + + Copyright 1999 2002-2008 LaTeX3 Project + Everyone is allowed to distribute verbatim copies of this + license document, but modification of it is not allowed. + + + PREAMBLE + ======== + + The LaTeX Project Public License (LPPL) is the primary license under + which the LaTeX kernel and the base LaTeX packages are distributed. + + You may use this license for any work of which you hold the copyright + and which you wish to distribute. This license may be particularly + suitable if your work is TeX-related (such as a LaTeX package), but + it is written in such a way that you can use it even if your work is + unrelated to TeX. + + The section `WHETHER AND HOW TO DISTRIBUTE WORKS UNDER THIS LICENSE', + below, gives instructions, examples, and recommendations for authors + who are considering distributing their works under this license. + + This license gives conditions under which a work may be distributed + and modified, as well as conditions under which modified versions of + that work may be distributed. + + We, the LaTeX3 Project, believe that the conditions below give you + the freedom to make and distribute modified versions of your work + that conform with whatever technical specifications you wish while + maintaining the availability, integrity, and reliability of + that work. If you do not see how to achieve your goal while + meeting these conditions, then read the document `cfgguide.tex' + and `modguide.tex' in the base LaTeX distribution for suggestions. + + + DEFINITIONS + =========== + + In this license document the following terms are used: + + `Work' + Any work being distributed under this License. + + `Derived Work' + Any work that under any applicable law is derived from the Work. + + `Modification' + Any procedure that produces a Derived Work under any applicable + law -- for example, the production of a file containing an + original file associated with the Work or a significant portion of + such a file, either verbatim or with modifications and/or + translated into another language. + + `Modify' + To apply any procedure that produces a Derived Work under any + applicable law. + + `Distribution' + Making copies of the Work available from one person to another, in + whole or in part. Distribution includes (but is not limited to) + making any electronic components of the Work accessible by + file transfer protocols such as FTP or HTTP or by shared file + systems such as Sun's Network File System (NFS). + + `Compiled Work' + A version of the Work that has been processed into a form where it + is directly usable on a computer system. This processing may + include using installation facilities provided by the Work, + transformations of the Work, copying of components of the Work, or + other activities. Note that modification of any installation + facilities provided by the Work constitutes modification of the Work. + + `Current Maintainer' + A person or persons nominated as such within the Work. If there is + no such explicit nomination then it is the `Copyright Holder' under + any applicable law. + + `Base Interpreter' + A program or process that is normally needed for running or + interpreting a part or the whole of the Work. + + A Base Interpreter may depend on external components but these + are not considered part of the Base Interpreter provided that each + external component clearly identifies itself whenever it is used + interactively. Unless explicitly specified when applying the + license to the Work, the only applicable Base Interpreter is a + `LaTeX-Format' or in the case of files belonging to the + `LaTeX-format' a program implementing the `TeX language'. + + + + CONDITIONS ON DISTRIBUTION AND MODIFICATION + =========================================== + + 1. Activities other than distribution and/or modification of the Work + are not covered by this license; they are outside its scope. In + particular, the act of running the Work is not restricted and no + requirements are made concerning any offers of support for the Work. + + 2. You may distribute a complete, unmodified copy of the Work as you + received it. Distribution of only part of the Work is considered + modification of the Work, and no right to distribute such a Derived + Work may be assumed under the terms of this clause. + + 3. You may distribute a Compiled Work that has been generated from a + complete, unmodified copy of the Work as distributed under Clause 2 + above, as long as that Compiled Work is distributed in such a way that + the recipients may install the Compiled Work on their system exactly + as it would have been installed if they generated a Compiled Work + directly from the Work. + + 4. If you are the Current Maintainer of the Work, you may, without + restriction, modify the Work, thus creating a Derived Work. You may + also distribute the Derived Work without restriction, including + Compiled Works generated from the Derived Work. Derived Works + distributed in this manner by the Current Maintainer are considered to + be updated versions of the Work. + + 5. If you are not the Current Maintainer of the Work, you may modify + your copy of the Work, thus creating a Derived Work based on the Work, + and compile this Derived Work, thus creating a Compiled Work based on + the Derived Work. + + 6. If you are not the Current Maintainer of the Work, you may + distribute a Derived Work provided the following conditions are met + for every component of the Work unless that component clearly states + in the copyright notice that it is exempt from that condition. Only + the Current Maintainer is allowed to add such statements of exemption + to a component of the Work. + + a. If a component of this Derived Work can be a direct replacement + for a component of the Work when that component is used with the + Base Interpreter, then, wherever this component of the Work + identifies itself to the user when used interactively with that + Base Interpreter, the replacement component of this Derived Work + clearly and unambiguously identifies itself as a modified version + of this component to the user when used interactively with that + Base Interpreter. + + b. Every component of the Derived Work contains prominent notices + detailing the nature of the changes to that component, or a + prominent reference to another file that is distributed as part + of the Derived Work and that contains a complete and accurate log + of the changes. + + c. No information in the Derived Work implies that any persons, + including (but not limited to) the authors of the original version + of the Work, provide any support, including (but not limited to) + the reporting and handling of errors, to recipients of the + Derived Work unless those persons have stated explicitly that + they do provide such support for the Derived Work. + + d. You distribute at least one of the following with the Derived Work: + + 1. A complete, unmodified copy of the Work; + if your distribution of a modified component is made by + offering access to copy the modified component from a + designated place, then offering equivalent access to copy + the Work from the same or some similar place meets this + condition, even though third parties are not compelled to + copy the Work along with the modified component; + + 2. Information that is sufficient to obtain a complete, + unmodified copy of the Work. + + 7. If you are not the Current Maintainer of the Work, you may + distribute a Compiled Work generated from a Derived Work, as long as + the Derived Work is distributed to all recipients of the Compiled + Work, and as long as the conditions of Clause 6, above, are met with + regard to the Derived Work. + + 8. The conditions above are not intended to prohibit, and hence do not + apply to, the modification, by any method, of any component so that it + becomes identical to an updated version of that component of the Work as + it is distributed by the Current Maintainer under Clause 4, above. + + 9. Distribution of the Work or any Derived Work in an alternative + format, where the Work or that Derived Work (in whole or in part) is + then produced by applying some process to that format, does not relax or + nullify any sections of this license as they pertain to the results of + applying that process. + + 10. a. A Derived Work may be distributed under a different license + provided that license itself honors the conditions listed in + Clause 6 above, in regard to the Work, though it does not have + to honor the rest of the conditions in this license. + + b. If a Derived Work is distributed under a different license, that + Derived Work must provide sufficient documentation as part of + itself to allow each recipient of that Derived Work to honor the + restrictions in Clause 6 above, concerning changes from the Work. + + 11. This license places no restrictions on works that are unrelated to + the Work, nor does this license place any restrictions on aggregating + such works with the Work by any means. + + 12. Nothing in this license is intended to, or may be used to, prevent + complete compliance by all parties with all applicable laws. + + + NO WARRANTY + =========== + + There is no warranty for the Work. Except when otherwise stated in + writing, the Copyright Holder provides the Work `as is', without + warranty of any kind, either expressed or implied, including, but not + limited to, the implied warranties of merchantability and fitness for a + particular purpose. The entire risk as to the quality and performance + of the Work is with you. Should the Work prove defective, you assume + the cost of all necessary servicing, repair, or correction. + + In no event unless required by applicable law or agreed to in writing + will The Copyright Holder, or any author named in the components of the + Work, or any other party who may distribute and/or modify the Work as + permitted above, be liable to you for damages, including any general, + special, incidental or consequential damages arising out of any use of + the Work or out of inability to use the Work (including, but not limited + to, loss of data, data being rendered inaccurate, or losses sustained by + anyone as a result of any failure of the Work to operate with any other + programs), even if the Copyright Holder or said author or said other + party has been advised of the possibility of such damages. + + + MAINTENANCE OF THE WORK + ======================= + + The Work has the status `author-maintained' if the Copyright Holder + explicitly and prominently states near the primary copyright notice in + the Work that the Work can only be maintained by the Copyright Holder + or simply that it is `author-maintained'. + + The Work has the status `maintained' if there is a Current Maintainer + who has indicated in the Work that they are willing to receive error + reports for the Work (for example, by supplying a valid e-mail + address). It is not required for the Current Maintainer to acknowledge + or act upon these error reports. + + The Work changes from status `maintained' to `unmaintained' if there + is no Current Maintainer, or the person stated to be Current + Maintainer of the work cannot be reached through the indicated means + of communication for a period of six months, and there are no other + significant signs of active maintenance. + + You can become the Current Maintainer of the Work by agreement with + any existing Current Maintainer to take over this role. + + If the Work is unmaintained, you can become the Current Maintainer of + the Work through the following steps: + + 1. Make a reasonable attempt to trace the Current Maintainer (and + the Copyright Holder, if the two differ) through the means of + an Internet or similar search. + + 2. If this search is successful, then enquire whether the Work + is still maintained. + + a. If it is being maintained, then ask the Current Maintainer + to update their communication data within one month. + + b. If the search is unsuccessful or no action to resume active + maintenance is taken by the Current Maintainer, then announce + within the pertinent community your intention to take over + maintenance. (If the Work is a LaTeX work, this could be + done, for example, by posting to comp.text.tex.) + + 3a. If the Current Maintainer is reachable and agrees to pass + maintenance of the Work to you, then this takes effect + immediately upon announcement. + + b. If the Current Maintainer is not reachable and the Copyright + Holder agrees that maintenance of the Work be passed to you, + then this takes effect immediately upon announcement. + + 4. If you make an `intention announcement' as described in 2b. above + and after three months your intention is challenged neither by + the Current Maintainer nor by the Copyright Holder nor by other + people, then you may arrange for the Work to be changed so as + to name you as the (new) Current Maintainer. + + 5. If the previously unreachable Current Maintainer becomes + reachable once more within three months of a change completed + under the terms of 3b) or 4), then that Current Maintainer must + become or remain the Current Maintainer upon request provided + they then update their communication data within one month. + + A change in the Current Maintainer does not, of itself, alter the fact + that the Work is distributed under the LPPL license. + + If you become the Current Maintainer of the Work, you should + immediately provide, within the Work, a prominent and unambiguous + statement of your status as Current Maintainer. You should also + announce your new status to the same pertinent community as + in 2b) above. + + + WHETHER AND HOW TO DISTRIBUTE WORKS UNDER THIS LICENSE + ====================================================== + + This section contains important instructions, examples, and + recommendations for authors who are considering distributing their + works under this license. These authors are addressed as `you' in + this section. + + Choosing This License or Another License + ---------------------------------------- + + If for any part of your work you want or need to use *distribution* + conditions that differ significantly from those in this license, then + do not refer to this license anywhere in your work but, instead, + distribute your work under a different license. You may use the text + of this license as a model for your own license, but your license + should not refer to the LPPL or otherwise give the impression that + your work is distributed under the LPPL. + + The document `modguide.tex' in the base LaTeX distribution explains + the motivation behind the conditions of this license. It explains, + for example, why distributing LaTeX under the GNU General Public + License (GPL) was considered inappropriate. Even if your work is + unrelated to LaTeX, the discussion in `modguide.tex' may still be + relevant, and authors intending to distribute their works under any + license are encouraged to read it. + + A Recommendation on Modification Without Distribution + ----------------------------------------------------- + + It is wise never to modify a component of the Work, even for your own + personal use, without also meeting the above conditions for + distributing the modified component. While you might intend that such + modifications will never be distributed, often this will happen by + accident -- you may forget that you have modified that component; or + it may not occur to you when allowing others to access the modified + version that you are thus distributing it and violating the conditions + of this license in ways that could have legal implications and, worse, + cause problems for the community. It is therefore usually in your + best interest to keep your copy of the Work identical with the public + one. Many works provide ways to control the behavior of that work + without altering any of its licensed components. + + How to Use This License + ----------------------- + + To use this license, place in each of the components of your work both + an explicit copyright notice including your name and the year the work + was authored and/or last substantially modified. Include also a + statement that the distribution and/or modification of that + component is constrained by the conditions in this license. + + Here is an example of such a notice and statement: + + %% pig.dtx + %% Copyright 2005 M. Y. Name + % + % This work may be distributed and/or modified under the + % conditions of the LaTeX Project Public License, either version 1.3 + % of this license or (at your option) any later version. + % The latest version of this license is in + % http://www.latex-project.org/lppl.txt + % and version 1.3 or later is part of all distributions of LaTeX + % version 2005/12/01 or later. + % + % This work has the LPPL maintenance status `maintained'. + % + % The Current Maintainer of this work is M. Y. Name. + % + % This work consists of the files pig.dtx and pig.ins + % and the derived file pig.sty. + + Given such a notice and statement in a file, the conditions + given in this license document would apply, with the `Work' referring + to the three files `pig.dtx', `pig.ins', and `pig.sty' (the last being + generated from `pig.dtx' using `pig.ins'), the `Base Interpreter' + referring to any `LaTeX-Format', and both `Copyright Holder' and + `Current Maintainer' referring to the person `M. Y. Name'. + + If you do not want the Maintenance section of LPPL to apply to your + Work, change `maintained' above into `author-maintained'. + However, we recommend that you use `maintained', as the Maintenance + section was added in order to ensure that your Work remains useful to + the community even when you can no longer maintain and support it + yourself. + + Derived Works That Are Not Replacements + --------------------------------------- + + Several clauses of the LPPL specify means to provide reliability and + stability for the user community. They therefore concern themselves + with the case that a Derived Work is intended to be used as a + (compatible or incompatible) replacement of the original Work. If + this is not the case (e.g., if a few lines of code are reused for a + completely different task), then clauses 6b and 6d shall not apply. + + + Important Recommendations + ------------------------- + + Defining What Constitutes the Work + + The LPPL requires that distributions of the Work contain all the + files of the Work. It is therefore important that you provide a + way for the licensee to determine which files constitute the Work. + This could, for example, be achieved by explicitly listing all the + files of the Work near the copyright notice of each file or by + using a line such as: + + % This work consists of all files listed in manifest.txt. + + in that place. In the absence of an unequivocal list it might be + impossible for the licensee to determine what is considered by you + to comprise the Work and, in such a case, the licensee would be + entitled to make reasonable conjectures as to which files comprise + the Work. + Creative Commons Attribution-ShareAlike 3.0 Unported + CREATIVE COMMONS CORPORATION IS NOT A LAW FIRM AND DOES NOT PROVIDE LEGAL SERVICES. DISTRIBUTION OF THIS LICENSE DOES NOT CREATE AN ATTORNEY-CLIENT RELATIONSHIP. CREATIVE COMMONS PROVIDES THIS INFORMATION ON AN "AS-IS" BASIS. CREATIVE COMMONS MAKES NO WARRANTIES REGARDING THE INFORMATION PROVIDED, AND DISCLAIMS LIABILITY FOR DAMAGES RESULTING FROM ITS USE. + License + THE WORK (AS DEFINED BELOW) IS PROVIDED UNDER THE TERMS OF THIS CREATIVE COMMONS PUBLIC LICENSE ("CCPL" OR "LICENSE"). THE WORK IS PROTECTED BY COPYRIGHT AND/OR OTHER APPLICABLE LAW. ANY USE OF THE WORK OTHER THAN AS AUTHORIZED UNDER THIS LICENSE OR COPYRIGHT LAW IS PROHIBITED. + BY EXERCISING ANY RIGHTS TO THE WORK PROVIDED HERE, YOU ACCEPT AND AGREE TO BE BOUND BY THE TERMS OF THIS LICENSE. TO THE EXTENT THIS LICENSE MAY BE CONSIDERED TO BE A CONTRACT, THE LICENSOR GRANTS YOU THE RIGHTS CONTAINED HERE IN CONSIDERATION OF YOUR ACCEPTANCE OF SUCH TERMS AND CONDITIONS. + 1. Definitions + + + "Adaptation" means a work based upon the Work, or upon the Work and other pre-existing works, such as a translation, adaptation, derivative work, arrangement of music or other alterations of a literary or artistic work, or phonogram or performance and includes cinematographic adaptations or any other form in which the Work may be recast, transformed, or adapted including in any form recognizably derived from the original, except that a work that constitutes a Collection will not be considered an Adaptation for the purpose of this License. For the avoidance of doubt, where the Work is a musical work, performance or phonogram, the synchronization of the Work in timed-relation with a moving image ("synching") will be considered an Adaptation for the purpose of this License. + + + "Collection" means a collection of literary or artistic works, such as encyclopedias and anthologies, or performances, phonograms or broadcasts, or other works or subject matter other than works listed in Section 1(f) below, which, by reason of the selection and arrangement of their contents, constitute intellectual creations, in which the Work is included in its entirety in unmodified form along with one or more other contributions, each constituting separate and independent works in themselves, which together are assembled into a collective whole. A work that constitutes a Collection will not be considered an Adaptation (as defined below) for the purposes of this License. + + + "Creative Commons Compatible License" means a license that is listed at http://creativecommons.org/compatiblelicenses that has been approved by Creative Commons as being essentially equivalent to this License, including, at a minimum, because that license: (i) contains terms that have the same purpose, meaning and effect as the License Elements of this License; and, (ii) explicitly permits the relicensing of adaptations of works made available under that license under this License or a Creative Commons jurisdiction license with the same License Elements as this License. + + + "Distribute" means to make available to the public the original and copies of the Work or Adaptation, as appropriate, through sale or other transfer of ownership. + + + "License Elements" means the following high-level license attributes as selected by Licensor and indicated in the title of this License: Attribution, ShareAlike. + + + "Licensor" means the individual, individuals, entity or entities that offer(s) the Work under the terms of this License. + + + "Original Author" means, in the case of a literary or artistic work, the individual, individuals, entity or entities who created the Work or if no individual or entity can be identified, the publisher; and in addition (i) in the case of a performance the actors, singers, musicians, dancers, and other persons who act, sing, deliver, declaim, play in, interpret or otherwise perform literary or artistic works or expressions of folklore; (ii) in the case of a phonogram the producer being the person or legal entity who first fixes the sounds of a performance or other sounds; and, (iii) in the case of broadcasts, the organization that transmits the broadcast. + + + "Work" means the literary and/or artistic work offered under the terms of this License including without limitation any production in the literary, scientific and artistic domain, whatever may be the mode or form of its expression including digital form, such as a book, pamphlet and other writing; a lecture, address, sermon or other work of the same nature; a dramatic or dramatico-musical work; a choreographic work or entertainment in dumb show; a musical composition with or without words; a cinematographic work to which are assimilated works expressed by a process analogous to cinematography; a work of drawing, painting, architecture, sculpture, engraving or lithography; a photographic work to which are assimilated works expressed by a process analogous to photography; a work of applied art; an illustration, map, plan, sketch or three-dimensional work relative to geography, topography, architecture or science; a performance; a broadcast; a phonogram; a compilation of data to the extent it is protected as a copyrightable work; or a work performed by a variety or circus performer to the extent it is not otherwise considered a literary or artistic work. + + + "You" means an individual or entity exercising rights under this License who has not previously violated the terms of this License with respect to the Work, or who has received express permission from the Licensor to exercise rights under this License despite a previous violation. + + + "Publicly Perform" means to perform public recitations of the Work and to communicate to the public those public recitations, by any means or process, including by wire or wireless means or public digital performances; to make available to the public Works in such a way that members of the public may access these Works from a place and at a place individually chosen by them; to perform the Work to the public by any means or process and the communication to the public of the performances of the Work, including by public digital performance; to broadcast and rebroadcast the Work by any means including signs, sounds or images. + + + "Reproduce" means to make copies of the Work by any means including without limitation by sound or visual recordings and the right of fixation and reproducing fixations of the Work, including storage of a protected performance or phonogram in digital form or other electronic medium. + + + 2. Fair Dealing Rights. Nothing in this License is intended to reduce, limit, or restrict any uses free from copyright or rights arising from limitations or exceptions that are provided for in connection with the copyright protection under copyright law or other applicable laws. + 3. License Grant. Subject to the terms and conditions of this License, Licensor hereby grants You a worldwide, royalty-free, non-exclusive, perpetual (for the duration of the applicable copyright) license to exercise the rights in the Work as stated below: + + + to Reproduce the Work, to incorporate the Work into one or more Collections, and to Reproduce the Work as incorporated in the Collections; + + + to create and Reproduce Adaptations provided that any such Adaptation, including any translation in any medium, takes reasonable steps to clearly label, demarcate or otherwise identify that changes were made to the original Work. For example, a translation could be marked "The original work was translated from English to Spanish," or a modification could indicate "The original work has been modified."; + + + to Distribute and Publicly Perform the Work including as incorporated in Collections; and, + + + to Distribute and Publicly Perform Adaptations. + + + For the avoidance of doubt: + + + Non-waivable Compulsory License Schemes. In those jurisdictions in which the right to collect royalties through any statutory or compulsory licensing scheme cannot be waived, the Licensor reserves the exclusive right to collect such royalties for any exercise by You of the rights granted under this License; + + + Waivable Compulsory License Schemes. In those jurisdictions in which the right to collect royalties through any statutory or compulsory licensing scheme can be waived, the Licensor waives the exclusive right to collect such royalties for any exercise by You of the rights granted under this License; and, + + + Voluntary License Schemes. The Licensor waives the right to collect royalties, whether individually or, in the event that the Licensor is a member of a collecting society that administers voluntary licensing schemes, via that society, from any exercise by You of the rights granted under this License. + + + + + The above rights may be exercised in all media and formats whether now known or hereafter devised. The above rights include the right to make such modifications as are technically necessary to exercise the rights in other media and formats. Subject to Section 8(f), all rights not expressly granted by Licensor are hereby reserved. + 4. Restrictions. The license granted in Section 3 above is expressly made subject to and limited by the following restrictions: + + + You may Distribute or Publicly Perform the Work only under the terms of this License. You must include a copy of, or the Uniform Resource Identifier (URI) for, this License with every copy of the Work You Distribute or Publicly Perform. You may not offer or impose any terms on the Work that restrict the terms of this License or the ability of the recipient of the Work to exercise the rights granted to that recipient under the terms of the License. You may not sublicense the Work. You must keep intact all notices that refer to this License and to the disclaimer of warranties with every copy of the Work You Distribute or Publicly Perform. When You Distribute or Publicly Perform the Work, You may not impose any effective technological measures on the Work that restrict the ability of a recipient of the Work from You to exercise the rights granted to that recipient under the terms of the License. This Section 4(a) applies to the Work as incorporated in a Collection, but this does not require the Collection apart from the Work itself to be made subject to the terms of this License. If You create a Collection, upon notice from any Licensor You must, to the extent practicable, remove from the Collection any credit as required by Section 4(c), as requested. If You create an Adaptation, upon notice from any Licensor You must, to the extent practicable, remove from the Adaptation any credit as required by Section 4(c), as requested. + + + You may Distribute or Publicly Perform an Adaptation only under the terms of: (i) this License; (ii) a later version of this License with the same License Elements as this License; (iii) a Creative Commons jurisdiction license (either this or a later license version) that contains the same License Elements as this License (e.g., Attribution-ShareAlike 3.0 US)); (iv) a Creative Commons Compatible License. If you license the Adaptation under one of the licenses mentioned in (iv), you must comply with the terms of that license. If you license the Adaptation under the terms of any of the licenses mentioned in (i), (ii) or (iii) (the "Applicable License"), you must comply with the terms of the Applicable License generally and the following provisions: (I) You must include a copy of, or the URI for, the Applicable License with every copy of each Adaptation You Distribute or Publicly Perform; (II) You may not offer or impose any terms on the Adaptation that restrict the terms of the Applicable License or the ability of the recipient of the Adaptation to exercise the rights granted to that recipient under the terms of the Applicable License; (III) You must keep intact all notices that refer to the Applicable License and to the disclaimer of warranties with every copy of the Work as included in the Adaptation You Distribute or Publicly Perform; (IV) when You Distribute or Publicly Perform the Adaptation, You may not impose any effective technological measures on the Adaptation that restrict the ability of a recipient of the Adaptation from You to exercise the rights granted to that recipient under the terms of the Applicable License. This Section 4(b) applies to the Adaptation as incorporated in a Collection, but this does not require the Collection apart from the Adaptation itself to be made subject to the terms of the Applicable License. + + + If You Distribute, or Publicly Perform the Work or any Adaptations or Collections, You must, unless a request has been made pursuant to Section 4(a), keep intact all copyright notices for the Work and provide, reasonable to the medium or means You are utilizing: (i) the name of the Original Author (or pseudonym, if applicable) if supplied, and/or if the Original Author and/or Licensor designate another party or parties (e.g., a sponsor institute, publishing entity, journal) for attribution ("Attribution Parties") in Licensor's copyright notice, terms of service or by other reasonable means, the name of such party or parties; (ii) the title of the Work if supplied; (iii) to the extent reasonably practicable, the URI, if any, that Licensor specifies to be associated with the Work, unless such URI does not refer to the copyright notice or licensing information for the Work; and (iv) , consistent with Ssection 3(b), in the case of an Adaptation, a credit identifying the use of the Work in the Adaptation (e.g., "French translation of the Work by Original Author," or "Screenplay based on original Work by Original Author"). The credit required by this Section 4(c) may be implemented in any reasonable manner; provided, however, that in the case of a Adaptation or Collection, at a minimum such credit will appear, if a credit for all contributing authors of the Adaptation or Collection appears, then as part of these credits and in a manner at least as prominent as the credits for the other contributing authors. For the avoidance of doubt, You may only use the credit required by this Section for the purpose of attribution in the manner set out above and, by exercising Your rights under this License, You may not implicitly or explicitly assert or imply any connection with, sponsorship or endorsement by the Original Author, Licensor and/or Attribution Parties, as appropriate, of You or Your use of the Work, without the separate, express prior written permission of the Original Author, Licensor and/or Attribution Parties. + + + Except as otherwise agreed in writing by the Licensor or as may be otherwise permitted by applicable law, if You Reproduce, Distribute or Publicly Perform the Work either by itself or as part of any Adaptations or Collections, You must not distort, mutilate, modify or take other derogatory action in relation to the Work which would be prejudicial to the Original Author's honor or reputation. Licensor agrees that in those jurisdictions (e.g. Japan), in which any exercise of the right granted in Section 3(b) of this License (the right to make Adaptations) would be deemed to be a distortion, mutilation, modification or other derogatory action prejudicial to the Original Author's honor and reputation, the Licensor will waive or not assert, as appropriate, this Section, to the fullest extent permitted by the applicable national law, to enable You to reasonably exercise Your right under Section 3(b) of this License (right to make Adaptations) but not otherwise. + + + 5. Representations, Warranties and Disclaimer + UNLESS OTHERWISE MUTUALLY AGREED TO BY THE PARTIES IN WRITING, LICENSOR OFFERS THE WORK AS-IS AND MAKES NO REPRESENTATIONS OR WARRANTIES OF ANY KIND CONCERNING THE WORK, EXPRESS, IMPLIED, STATUTORY OR OTHERWISE, INCLUDING, WITHOUT LIMITATION, WARRANTIES OF TITLE, MERCHANTIBILITY, FITNESS FOR A PARTICULAR PURPOSE, NONINFRINGEMENT, OR THE ABSENCE OF LATENT OR OTHER DEFECTS, ACCURACY, OR THE PRESENCE OF ABSENCE OF ERRORS, WHETHER OR NOT DISCOVERABLE. SOME JURISDICTIONS DO NOT ALLOW THE EXCLUSION OF IMPLIED WARRANTIES, SO SUCH EXCLUSION MAY NOT APPLY TO YOU. + 6. Limitation on Liability. EXCEPT TO THE EXTENT REQUIRED BY APPLICABLE LAW, IN NO EVENT WILL LICENSOR BE LIABLE TO YOU ON ANY LEGAL THEORY FOR ANY SPECIAL, INCIDENTAL, CONSEQUENTIAL, PUNITIVE OR EXEMPLARY DAMAGES ARISING OUT OF THIS LICENSE OR THE USE OF THE WORK, EVEN IF LICENSOR HAS BEEN ADVISED OF THE POSSIBILITY OF SUCH DAMAGES. + 7. Termination + + + This License and the rights granted hereunder will terminate automatically upon any breach by You of the terms of this License. Individuals or entities who have received Adaptations or Collections from You under this License, however, will not have their licenses terminated provided such individuals or entities remain in full compliance with those licenses. Sections 1, 2, 5, 6, 7, and 8 will survive any termination of this License. + + + Subject to the above terms and conditions, the license granted here is perpetual (for the duration of the applicable copyright in the Work). Notwithstanding the above, Licensor reserves the right to release the Work under different license terms or to stop distributing the Work at any time; provided, however that any such election will not serve to withdraw this License (or any other license that has been, or is required to be, granted under the terms of this License), and this License will continue in full force and effect unless terminated as stated above. + + + 8. Miscellaneous + + + Each time You Distribute or Publicly Perform the Work or a Collection, the Licensor offers to the recipient a license to the Work on the same terms and conditions as the license granted to You under this License. + + + Each time You Distribute or Publicly Perform an Adaptation, Licensor offers to the recipient a license to the original Work on the same terms and conditions as the license granted to You under this License. + + + If any provision of this License is invalid or unenforceable under applicable law, it shall not affect the validity or enforceability of the remainder of the terms of this License, and without further action by the parties to this agreement, such provision shall be reformed to the minimum extent necessary to make such provision valid and enforceable. + + + No term or provision of this License shall be deemed waived and no breach consented to unless such waiver or consent shall be in writing and signed by the party to be charged with such waiver or consent. + + + This License constitutes the entire agreement between the parties with respect to the Work licensed here. There are no understandings, agreements or representations with respect to the Work not specified here. Licensor shall not be bound by any additional provisions that may appear in any communication from You. This License may not be modified without the mutual written agreement of the Licensor and You. + + + The rights granted under, and the subject matter referenced, in this License were drafted utilizing the terminology of the Berne Convention for the Protection of Literary and Artistic Works (as amended on September 28, 1979), the Rome Convention of 1961, the WIPO Copyright Treaty of 1996, the WIPO Performances and Phonograms Treaty of 1996 and the Universal Copyright Convention (as revised on July 24, 1971). These rights and subject matter take effect in the relevant jurisdiction in which the License terms are sought to be enforced according to the corresponding provisions of the implementation of those treaty provisions in the applicable national law. If the standard suite of rights granted under applicable copyright law includes additional rights not granted under this License, such additional rights are deemed to be included in the License; this License is not intended to restrict the license of any rights under applicable law. + + + Creative Commons Notice + Creative Commons is not a party to this License, and makes no warranty whatsoever in connection with the Work. Creative Commons will not be liable to You or any party on any legal theory for any damages whatsoever, including without limitation any general, special, incidental or consequential damages arising in connection to this license. Notwithstanding the foregoing two (2) sentences, if Creative Commons has expressly identified itself as the Licensor hereunder, it shall have all rights and obligations of Licensor. + Except for the limited purpose of indicating to the public that the Work is licensed under the CCPL, Creative Commons does not authorize the use by either party of the trademark "Creative Commons" or any related trademark or logo of Creative Commons without the prior written consent of Creative Commons. Any permitted use will be in compliance with Creative Commons' then-current trademark usage guidelines, as may be published on its website or otherwise made available upon request from time to time. For the avoidance of doubt, this trademark restriction does not form part of the License. + Creative Commons may be contacted at http://creativecommons.org/. + + + \ No newline at end of file diff --git a/test/files/LICENSE.header.new.nodict.fodt.zck b/test/files/LICENSE.header.new.nodict.fodt.zck new file mode 100644 index 0000000000000000000000000000000000000000..550eade8fd4dcdfb341269058391475017c9392c GIT binary patch literal 432 zcmV;h0Z;w_T0=`Qfe3@0Vg_*(fp}6(Kj95MM@_gN3z}U{x|35=sI{L_j0)!$ZQ5nj zSjJHABO7A1H>cxdvoS#G*kF@vf&`5pv;la4f@6Y%kpKVy0000000000000000Dyom z#l=&Wwhj$BxozhyWB4a|pgLiJ57w;}@%1b9&B*OFGYi%qq#FZe9Pfbf@m?hz~DJNk`W4l z#H(13@MHP~JN*7JCd-lgB-R9WgG{!@utcAh9p)EXExDuwZ4b;)XyX~aOo*|aHcm#xa{ z8Gm?dVlrg8Zft?zihmYy0Fm)h%zw#|gtoyo++i1k#HOYA##p+Xk>UB&Isac_1EEer affuZzL0K5$l#%Aj!Z&?%%4^049)f@b-o?rQ literal 0 HcmV?d00001 diff --git a/test/files/LICENSE.manual.dict.fodt.zck b/test/files/LICENSE.manual.dict.fodt.zck new file mode 100644 index 0000000000000000000000000000000000000000..fc96bdc2c48e1284695ed7000be727e2efad8f2d GIT binary patch literal 442761 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

AnD4B3in;+bcw-1R}T3;}}tIFVT#AbP@>$ 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

#=L$sM}m~EB4###i?}K4@8+C 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

xikR2quj`1F5ng!IHrR$7ls~o{Qa$0~jR5 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≤TZFAH-FFI2^&`_}o;fs?F4f@|G1f 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 LCQS`*Yl!`SbI{JN literal 0 HcmV?d00001 diff --git a/test/files/LICENSE.nocomp.fodt.zck b/test/files/LICENSE.nocomp.fodt.zck new file mode 100644 index 0000000000000000000000000000000000000000..e203e41f36d37489840999fea932014f8ad426b3 GIT binary patch literal 949231 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

6jjiz6WwpJcL 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�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%0A=>V*+0=BS>DaY!S=`MI5Q) zz|P2b#JARiuL3H2!F@u%kG$>yS9C^ zyOhrmmk}hK(iksIaVmb?g6AXU+ujP~6eASxVQzWsV1$7n^(*Z!A))O=QI1j?en+Fj zA-0hS7%Xqa#C1Zadx%m4S=-AY_$p+m8QeITcH^~X@Ly~-K#8`wmrf}1R*}R(wjFOoOYHibz_1olu z)j_n0TqX0am<&_T)itvJim>;q7GSBcnU5_XPOTe(xo#sf&76*?YXEHOSJaS6s{eX= zteOYYGYxNN#O9=$Mx>gzyf-=c+_QqTV9=g-H`ppV!t7Wv%RPS2BIa`N7~OEJDkXGb<=x9t?HGH8uqArmGo5+kpz*MJQ~-Q z_uPjHG2qRlP{kd!vZ3D+PzyKDZC=E)C2#J?SQ!oy8-sKmFVkIql4ukd^ZNP;I{c*l zai`9=49IK?aH);*1D$Q9+R_*fr}`swORZEp%W_%OjFE?Z5E4F&F;sm}TRQJyc_9xo z`ms8J?I;RjIaIIIs4lXSHg{A+8Hg<*c0|C}8?OAIk07TyktEKkl;A>)glQoQCcFVA zgvSVL1vBmWOD1>XCj^c+mT6J|r&U)!@t(5k86x3dSkYLCgXXJJJ;w=3&56*Qt4)Pf zhCTANuNEqMPeQ8MimUH%fhW1DESMWpSF*qdGk7trJb+dN&;+>UCMGO~zBRP+`&4`& zjgk8tUxr_ZxhFXSnMz!UrN5yQ**PSr9GaQR80PQK6-WWwcOslJ5nmiGX+n{+GP%$QAgpIrO^aDmf0Y>n`~ULL92{Z2XWCclRz-@oH)Q<9|9jz zzh{#k{Su}FvZ(FPnBaP=n4@n>gmldgsC@_e6oSx&3EYwnO&ZDO6qRa4|0sv_jMkJz z?N?V{rPqOPs8DbTVB8HAQ@j^JtWXcxys`lxR&QBxl#b4q3jmrMKyRkeh+ZrQIek)OfV~uRg!J zC=9$7of=V@gro!)8{&%85GebM7jM;U!9pCfSH1a)@M$_uZ>bV5n{_H9luZ!noZx8! zrKBp#yU!W26#@P1!i6a487k8tYYJo->p;8!a}Mt=0w!Kf_8tCz$C1k2k9ZwC^uN#& z5jXFQ1|eQe1~lhzy?{_>mO(7=^4g9JjjWYpM-^Ct9w>lVT@0deOb#3%fvh-npv);; z`g_5frgVcHs=&b_X1zm~m=YJ%6vFh!``Gyky`a-WA)V?e{duliFTwu7*=c+q9~_+k ztiImm2F|+x2&qW6NvC0993P&%dKXQH)*PceaKB;T*_XAdphX3geh)lMkV8C_Ub!ov z0p2CD!5!Ebs%+4xmg*9`Mnq4Bt|3T^X`b_uIGi~mnv#ce#?yUF{8gpjj<%1TN?>q~ zj7EnTi>qP6auWfel>37OnT3CUg+(;GuMRS%vMhp6i{G{GiczA&HP2QR5TvcfuosF{yQ60_VZ+6j~R zur<4#{uce!5&+>lDj@d??naitP1Z_>&o5r_(W?+Z{TkQMNcMD;&U2^ee8w(JfT0kf zKZ7-wj$GCOqGW+LW@{g*g!0$PF8xv;Dp1RFF2Px-tlMrgvOZmM;25=bW>~+tFzAB+ zq{+cD=JW{`9;M`ifUhza&M8Io#l;iBqahJ3 zj9XB~?uP*j0GnA7jgjUMVTZVo`VIsBKnbx*i}rGv@w<1wxp)8eS6|-#Vlp%S<+U^8 zcX#fT&^ z&=ZyaY0}50gS2Cf0aKVkwG|4!p%SXAI}~}JuH#Dy9>Jp>t6Of~=qM9puIwT>VeZ2# z6R6iY4`?jWYSe@tJNvU#qSX!{iQ8zYu&G;yMJJ9;8p^}A z0Fblz)lk%~7m2NRDq^5>7V+Q~iPbWQ*qV)xKm*|B0yMd*o`0Azaz;)dBeEkP-^^y| zidFBpfWuru70HBz`5WI!^?;5>zdZIxV{#6vb=-7E<8irjY z*7eQ~3>0i5;4V(=(VBGHQZ15@R!9YAhhNXpPssQy>nc!jimkjx!PxP(q6JEQu-9p1 zhVLD4Snc*WJD93q964y67wIby+@=m3JKz=jW44`nx1XFbYOVI0<6iF^qwXs{|R-nU)31O;jU@HKjQ5H zE+{UF&KlelG{2(wf^gM~!&}ea--ldjuXR)u&O!Bnn3~HMW zcO?PCWYYEsoQi!DTL5rZaCH!|E>a}nB*j5g4LN}6OPiBi5oAKiPkr5?tykwZw1n-Y zV0sPPVpaP6dRhX8>`|#f_;!>WTyUSVt2er9$UVbspeKW2D?3xeL{KCHsG*$BQSwa) z6x{*zA!q?*tNHp3B{YK=0m8E8K42rPpRo9)S7`ND8<;TQk3DJ9Kz`IQl}7O?#msEFBL3FgQpd1G#Rbt4SWbmE{k z5LLMHsWf6n1kX?sT~0ekUrX2?t5VK4mno;x$<2}ld2q#{YN8~V64ekB_MpKX=N15z z#_+XbI76%gU+;bT#!oW6@b`OER zW}=^386&r&xWBEEEdRWGno;>MKZ@;02J}19-x3nV9jcj=C|@Y~$zy6=&7mR$oU|Fh z9Ime(U@AbMP&E%trh(EQIEBSA#D@yXkh#MX1JSVf^ zkDPhLM=HM%OEa?*WG*#!MC9Zd#5VA6j<&>T6|uxE>muPnz=%KK&a;?eVB>hc$Zyqb z+sfoI*QmMq65pVnGR`%3YI%2InqKsi+}6Hhn`JOZlGtxiU7-DqXtPS`8OBG zjN&_tPE>xyrZEr#q{<3&DA7j~`XQDe-Y{Mf;q-DT>eBtpyT@Ug$DuYQzf6$tcGWW! zwj3ype)rZ>g6yWg4(Z7<#mT>UxRTzKX|}V|_f*Ngj~PszOzFI$658NQf|XJ#peo&; zk^)S+l(MB#L7@aUUu#xj-P6u7@`T!XOqk(R2Dx`t(6#^E(p?=4WAiFY(AqDVeL$e3 zT3(Fe2A<2?U)>}iYANz>6^aU;u$%KNN93Qc4=I^AI*AA|r)I9cE*UvEbl^Owz^{UQL>2qF^aDOg zitE?CMyfNi5272bUVTT!ezj-t0^%>yxba^hQUZ`BMV#d1aG4uo1Y(z-Ip!8@f6Xsp zRH~&YTHYu6e#A49WMISgUp%R~106mT3^iy3jBbalQe$BCwP5s$2*2N`4`Nza^^lGz zD8pl|=|lti4kaGLK$@Ev`1VY;6sge9WgE{JwQ~R!}EQf#+c$qsbuDz;&>PL z07a6CC|&F+ruBTz*hY}XXF1s%$-;*D=v)BB5uo(MCf=wLv-RcHwgr@sf4O(tY9*U+ zSR;m(sy;-&iv?Ea-MyYN<~YM8?np7i5&;!6Mm>XpCz(y7p=efaN`V=oq!_A=U#ODh z5iuivkY@erdt6!J&-JwQTILz6?I8Y>AI zzB*K;>s!X5QUx|TVmF-z4bLpYa4w{j+EKDc0D>R=6c~is69dPv5ac6P&Kuo})qb6Y zLNID9z?B-aO`0hb0Y2bX3!QvGJg{t2_u{DC4v|SPOJx*+x?uL48<74B$Y-u+XOEpc zR37t5$-alW$1>WX90yj+gL%Rf(-6@VdQ4lIi=V9|jd5VC6j#MbE zSzbKOnE-_(W+cTVOevd&(egF%arn&@PpSSBWI>E53|^UbxQhQvSJd`^8XsL+4;^dz zfHIH~qJl-#bO{Kpxvlz>23NBd4VVnYgu3nw4%aT~5%mYHvWbuGkj*v1AfIL2R-;cR zCLDOZ#5`Cgr0D=;T<{{YRk6S0Y#ei+)X^NE{l%SI239bV_q0P-5 zTmvEZ&eG8Bt>HT~mEBC9Cf5HL&2y_Qq6V&`R4p`By$Av&|GC;GqNTQmv@MC(xRgW& zhdb&@I>2YLh?C+p$N$wSHISlE%LgtGfeA&8Vb`@OuyS377?^(`w=JG32`KjRn>78l zUX&Ae&3k8usahMPY}E1cYjlXMY5;JF{4Z;}yKCEf&yto`xW#v9Ute|E+jDIwKWwb8 z&0opB`GmXT*EhK2{lV-Zm)Glh@%2Y*yFYH+)V1!r8#A8h_V2lvy6-)&Pv@x}-~Ybx zmpv|t?=GYNfy?V3Kj!7WiGFMC7sfXJWqsrE9#`CROS-R4|AmXvXI$RC$LgEgvtM>M z_jKL6-mlr4yPH2g+RN+KpJ?vp=c7BTP`QqM^GW=(-L6_# z&?$A(>c4MpKj3orO`Vk8J>K1T;+xyK$Nnd_zQLF6%6cxlD0{G8Q*S0qI04nd{zWRqdyFaaMuV1>( z9(4H{`)4~(QPz)ko^G+x0bd5##_Yky!;SU5&7Z+C537Ve0$#nL3Z5PNd@WFn0w8QZSW=x%66!bwsBB8Y(c7%f;#82iE_9ujZ-Pwb+pVofdc+!!exBBD8 z_Qvko7BfE{Z>(?XACM?4u)Vjo6^$6q$2W*) ziZo`M4_RvcQHl_)(&O_HsQ6)n$JQSFj39bY>pW(Yn+X$^_8St8%M$uyW=;VCzj0!^ z@PtKk-I>ND_hcBXd5+1RgYtV0%JbnfDavgO=`dokMswk%ue(cAC?|Mh`pPUnj#Oy` zwQMQvW8H_nj~`$&l&h7ZZ;pUvO^cQWW>?bj5rM(*a604k4Y3(j`1#fZUNlzj4k*ZI z^hH^!-0k9>GA+4cg?dZPOXb9hMnq0Y#zwl0G6}jL$>T16c1UB8+~Q2SGncd~DSE~2 z+Ebb8$iodS?2|VZFjR5^#aGr)?PaJ?;1QgJLw56y8HQ0ZHuwQV^AxQrSSC6!)*S>o z-+!qn2Y?=a>>CFKcjA{Zm&NT3S*7MCE}r*=1pOTb7^}b1b)z5Jp{@%d$I}q~D!-$@ zCL0&NYHn+oa5G6$D-(JO?5Uev;XQ|{vO+f95*vD>xq=b@)fyQa? zG4SQ;GMS%g(pLEQlke4Z;JpEpRw0~FuGyIC{Wax5Y#6rtqWXwLsX~oV;_8Op^p@9K zc;?1BonX;^JlTjm96$xm{rdH@&#$Z#8h-D?aiH)!`Zp~{)srW=)(xc&2PWuE1B!c; z3IAQ>Am-%(@*^T1AF$c)Gx^E87D#}_xAuIH7g!>_z*vdMoMG-?bB8e8;EndG8I-q;*~8PRl1^Wv#T@@2D0o;!%%OqY2qi zg1xWIC5?8nO3l8~&C@-Q6NjEu#NR(VeNQ6egec?Y$-!qgT}uOqYnQBx-8JmqmYGb- zqmv~`X43YO>?uwDKOYj=&qALYZKi=Eo9}e9mCSW6kbHhl%S1GFeaOn3?cW5o*)Dbg ztwWFY59qO2l3*u6crBf^ob48)cr+&g18nd8Z2k1K!0w>oO{O8O(Hn6*yZy~KUn~h0 z@o>KD=8O}m#vhlB6@JE(SneeQ=jK7?bJ2U0{FHet3IgFl#xTawyZ=71%GEya?di+g zZp5}9pFa8PUw02*)-~{dz5n&sU;Opn7x%un{mtDk?|t(5 z_cGlUsIQ+hvvW7j*p~3DNL+|-ms%i?y0n))*!chN|1-Pu#TQ>K%*X`G&i=>oyYFI$ z`?KHGV*Bm8_is74Zz4SWBtK&~$jd){^7`Gox8HvL`OEW{pPin)`h24IU{kKw$>BTs zNqSj6Lh?`*rGR%BcJy<6rYHMfZRuCv&#jbD*#G{2ykfU2UNo{%?ml90Nc}=dl1o+r zgUP4F(sT638-1yi8+7eNFBxfHpZMaG(j5psGLMcGNWx$j@^;n6K(431ku9Fs<<&HL zXPQRu%+o0Td?TK>1V-NAXx@et;YI&@Rf^dQLv9fnTX!gkqPo7fpzq~SNhaM>9+UwY znJZ*2H^>3GC^DXa#DsnsWP&!7;EsW-4kk>jlf^a^2SjDAvS9s8t9ME(?f(`9W|8KR z%$9OxK6oGPu{w<1&VKL^T`oX42g%YjSMWH%kxHY~&$S}lw4)MjtYaGig4&`5CDqbX zGN_1KM5^!BE%xVxn5SMtST$#Q9LW;w^^%{H%b;N12NMMzw&Dp;sCLV!nKYJ=hZvqc$93aaTv`bx+!tSZqd+vjwO zd9EaxUo;m=DMcn={#}$ef|X-~LO4QdAx>x3y5OiCj>Mi?zQ!pl&%J`HVN`o^3 zsohWYOawPgC52cSp`r`Kog#q%PcJ!fc-H$IP@{deo%mL6ojQZ0P@aN~9;~r40{1)| zK{a|o4%ImVPTfHZAdz*xB--?ro!gimzBx|Yi1o9!Tg-88+s|LY@w%fmOL8Fu6&pg1 zd$KD4IgHcrS2a;dAj(oVqe!hkH=HADd^qJ1ApBK%D z@Aw;rUR7{DO7i3W>*uBcT|zC@upB z=x5c+ae4J~l>D%6_Fd(AKE9%6P1BN7lAX^-_~Ic9X^S(#K(Oo&TH!oVD&|O^Y&w2L z^grg;GQRzc;6axC1N#Jq1gAvQk&1h3y_LcKgqj$^+)0^vjU#F2=?o~NHhoo-oMi`q zZCdpM<2v#J&#HE&?Fzpow2=7j*5)$}VLEQZQU$P+3-ycQNCscJ%Syr%qzP|?wegjR zv1p2cN}Mj0A@ z$qd;7J10^=CdKHOAR;q$B+!D*ZNw0Wr`AaJsltw9fIKw`afC=4Nefb%q@gPpC)sue zU5u0l>d88PusQ{kgmHmb{J?7L#Eo@6Th)oDzV|f)xl>ol`CN?b7g9ONN*=J~p<20aFJBpjd(c60&SVFl30&$4_0?%8(V<8+B=q7a%ch82IFYd63 zFFu<+Xt#wn!>?ceO84h~|F8ec!Z@vk|NX!IZ%7_j$5O7O(cLDGwim^$R>nRHua`}u zRqYqXK$K?d+&VtO4QEJf(q*`QaAkaXQPmE|_oiO{na3mh`BHavmxlN9x_FwGNm!8H$ z&4G|$HzbgBx^9e$c6c@HDw&`SW?kVh9uGgWn2YWPM3|mMG2nCJlHlU#ccICVP;^e} z`&g$NA6|R!Y&M;O_h?&`B9H^k%M!K!cmY4Ec`bT){>hbzdQBj#u`}ADk;Nrntvg0b zT%0uPGU-bu*wp-t{Ceem1TK-#Z}({`J)A-(mKbzwpF8{x)P{5oS}7CAgP*`>gL(x6DUK4Qul!~WISd-k5%o9-;Zf%vxL^wRrcJZ>= zZCpB+Z6CG?IB09fFAtO>EXRi@U+W{eNiOQuLgjFpA^)`mNMXIpfsAJ4X5h*$Zmdfs#%!3$LvO1iupn`pTSc4UvSUQym0=Ep zJ9+9{H!L?oqCf}nn}oIn4sJ@-8_6X}k^LdkBNoQx`LPF&i>l~fY9_vw;t1q;c}vkM zEgIBS?9>60Q_fAXr68j#Z!@LQ)Y@iID&WER zEQP(#B(xLSyB${wfP)u8Gd7tO(pT(z0 zZk>DQYyG9otvzrKk#=Dzk!6I;jEq#bk~k4^#_s0pHqy`!>G>2?z4)@trqLp-urpjV zq7~w`5+E|ybNPC2Xr4OD(k7CXU0F;d@j;15pkJ=zQ4@K#h=M|Rg?JUcnlPw*G+ABv zSj>asz&LCBl2@l(UGSg$T@TP+OUZzOq)3`D7t~NGB5M?g`6ma;(^3Pj9`_UN^Du_I zC11fz+dN5^SFoijExkSVr8a7q-TqGWbq--H+YHuDS{s>LuUHv$Nd`~e6X<(0)I|$) zoW+LE;lV}Rx@wH4R%>{n@{6M%`p3hgAY>VT4b-mq1U zcY5hX?1JC5mU#|#nbgcU+2@FYsP=jrz&iH=EiT&WIM8q)IxM!C+Xe_pO5<(FP32Fq z5p2*Qv~M!S1i@mk6K(>0Ixcfc|JEH=A%U< zFV%>6R$(L`p_hIXtoc_j@bFX;P=Sn;QbFPn%f(Dp9ICvNi58N{ok`3eof(T(0fh=u2 zKO-G0XH4EX*=s;3u>l$*Vlz5H@`M8~F`JCj5+E2tH65xkFKXDOPj{TvXFiW-3s+GP z{0BFxcBM8Gubp2z!>y4A6Qa3rPXUp*JRY!-#|mwOE$e8**eS`TEp@Wl2w+=QfJw8? zOj}3bJygMj#6;0bP7Kr3$@!7Y0*S0H-khdnFi;9JXuZ(RVdHe#sp6KB^KrQwONCC< z+j96D&r;_tlP=TlqN2#%kfTlCYqUqjq6Uf%VCjV}HgMWgQLf{QbGP&WecufxwcF0%Q|hcz$|> zsY<86Y3fUk(bWpPLk0}ERMF&jibFb#b^8kwA=ZhquR}fiKU0z1l_I(8z+?>%dn%2b zWe*XT+I1xnC3nchH7t)?>mKf=N+pHkwg#!PwA$I0$vRM>Oejd5Ou>so29L$GNl}G7 z%$F|(FoJ39@b$^*@#!lMOTrF!_27WOE^LdWQ$Hkame^hd=`Rf}^rSkZ!|mH;_WZK> zct`Y@)hq9moJFy`po@zQan3tmkia@PeDfSbgktjhmJKzd=eS*L3QlPTE6^I z5QLcP1$rUYirW!~aNPiY8+FPuuT)tu*y801*)TOAQL*v@x*@2^9Rb!nBl}qmu2VAW zqZy3%#OL=uBVHnM5o&&}BJlMHvrpuMuXLiHNo5Q{T6p<#O?k5g3#h%f3`T_BiuU`K zU1<_b4MzT6P@$80SJehMOG)j_$~w4+d8E=hT^t+HoK2wOR<~J;oh3uMr#cpoX!m#A zAaeLtE|pSv5<~GhE*Uaiph{n@qh7DfP8Fl9?2`qQ)E*e?)pICHUYu5m>Y8537E(gImTi0gSa5F`R%VC}Z zbE&NMAs<=zxGW+enA*`mK7RzeJeRrKwIDdQB$?{AL3J$mt{ zPxQyVJ73?s_vLN=Gtq0ab@!`l-}Au@Aw-q;IIJ~*?c0O>vnayK9O9JkcN1bEmz0!@h)&Gp1(#2RB+h@i{hh0;U9&Ux&v zrDee=w+}(jf`inRsO*f?f*CsDMFc>I&D(V%D-tGAj66;~kOz>~gWnWYP>KUzb9^6j z){C>0GOSLSXtJjxD&=KrPKQgBOM7uFmh7QsrjZt7)8QJ??2-k7qfoL(7b_TP)3AGC z_6N9nwC*E9NvFm~Mb3rp|BfLO_uHG5`s&4c|d4g6)te(=rtm!WynYQ z`R`^xnBq6(_Ci6Ya3#JlUd1aa)tJ6;`s|s9U%Wz^o!)tipE_Uxb-j`6e?HegG!42G zzmhzbL?MVKL{4R_KKXu4G|wf=8A}dI=d7qUZ^w3fkVB!=;*s>xA-9>iPgV~C(sBIW z;W9b!3=2|Kf~x|oBg;;|Z2phmz{cX*EAIhGS6O)o*XoQ+zAO?~w<~+9T#4)nXqzFV zr^hrk2Jh0He?~%8-+_xZqPiKLh)V_TIWx8+!fgK))0wJ1DRJI|N%}$TI8=QNex#UC z?!OZtW-&sOVb(=`JDV6e63Oh{`^$QcSo!lq#1q)41j0~TXAD)qf)Z;bih6<7q0xMe z?~~^mGD8RZtitv>jlrfRw3^Kt*th5@)U_9lg?rH3N3+iE%R1xg^uejw#vV@#>>&ou zKfwIziPGfMr6f&sr9&*@QSzrMB+hWUmO78vqD`xNKViH%r7Dp*_gnNXLrx3Axm z)j$=79ZPY*kn-%lo#0%`h~#tWdPBV~L=KD77N@>6PtZ>CczN_YPgpW=`L_$`+PdL? z&f?cHVFdn{fetGvW=TLz)LH-01;Hlu zxFJGtLKAk;{dfgA&M-+ZS|oexW_tvA_z1a!?AtS>1GY_iTZ)mu3_&{f$295&3nr-Mh%c!7X zhg_?T#q6NK$KwcW{N#vE@3Gy?B52P&)@>^E;SfY(Pt_tV@TrufaXWS1G@ZLihw`zY z4u$hUGEk;3i%cw7Pm?l>$PSDx9-oQoyVB$eT$ z`_Dffs4<}z2psynvyKbs1&b6>8T_^MC%ng zrO-E|GCM290T9CC@A$vGHl*eH)F}5m25excKiT=d-x!^ReBZ9joMx(BEb6ltzH%8+ zWOLTFcxSj*=O~CpFp13@>T*&JhUd>XHPTK_?BRT6G%}%V95dQH^Fi z{)1yXsP)5zoQ1s(Qr;dOo-rbW(6SOX)Loosea9S*ViZ`_@bIuIt{@S^u1Ae{Z3+u8 zpr5sCC*Ays(f{$f@yZ>5@6Uc>a#uE-pF&xgm3mjemNq z3yqLjFX>Xn?^kgWPA{&0R15NM=Y4%cS($N76Qk8e4{&U(ULZaKl&~^19`4VWBxPrX z^`!ARDZdN8LIshz)IbTh!RS!)u{u$X(oEE9BrA41)CL6VVp4PgXAAu4hx3n;zoP9M z3xppAlBke^Ep2R@3G`R+HIIbaNie9axFEu#GMUDJ=g?z$9TyyWA3?7Ue@PNRd{t(g z7LXj%7ldV9$HIw}H){*TZYkO#yc#hbeZqR#q7l+eW|nLV(kxU9(q(~bAjt4+0jQ2L zk#)E-<^_s3W5Pg?>gF(Eai|A=+HqzTR>No%tGzyb0km2C;1FY9kdJW*+2BZe@qJ(; z0w?|a##A?!v{@-^yC{mME42g0pyC!Q6K=+#9BcW}2GbnNh<*FLAf-Unl<l{BKcG^YeqG>xc@rWB5KG$hLc*5&vBmtMQ;f&9qh4M@a1ge<2Q^86cGXGn zdnhGBs1bie5K6kJJnQ*k1ghe7S^28)>vNU5>K3|{kzOhUIOsZNDzHssbv*F0GGdR~s(Cj0iT>@nzd~EuwUy2fIGh+rPD}5+Z6AB7qAP2feq649L zc>EH*ktx$wF&5vUI;5W?mejYH}r!%t@y>T?xa0?Bu$2Wp$p z31ue?_4@kN_{9sfeqW6Mq~2thz^f;rN=;bG%BID*f~~A5 z(6R>Z#feg$XdIbZT&65{Mj*GlI|bQ~mY(=Zqc_N-uMNrFJ=Mk5CYG)V!9MBUft;>t ze_1E;+9aSwK_ErE8h5uEwDFBK0+_1oFT9sExY4N#Ekl`#>M8LJxEx~SSF#n52w9y! zI!d>VSXmqClG};f%)LL3@{_?@cX=g*g1WW_QNgL9}k+A4$2n32S+lJLvM&9=6J4sc!SQc$Vafao1WqW&Siu^$x$p_(7 zQ-?9o0FUOmmkR@>r=}kE9~a-I#|o0`-89oKBYmtEESQ$cOy2q8%lr4gzIW$t4It_V zEN|WY=Gv)AlA5F@A7pv46h+xJ5`iu*)`uDuqHd46e-()a&$l>Ild!2O&u6#4w8p)C zKP>S3~)iaGk|sp5S(D3zW#A(vcG3L%c>M>sS+^G_(Hxb_|1|8rm z8$KBEvfPz~&eV7mEh>T$9z`Kz#$|1T^V-wv(K{}UP-I1(pL};hh)^aWW@~$|Hi*D9 zMLMrd8ct*&hzq1R|d=4V3qp?U<>G|y&Vj&jWMrk4w`)hEMi5BllK%m&@nmn;HH&3k@R3b z%b&r8gD3o*8Fc@-oSgJK1U8t(Rgf7#M1xPA?W08#zE(8hYl8HGhA!M3hDt3RNO%Ul z30|s4#b3w{Zh-1o7)k_ogp+`ygOvdinJMIvkaXt=Y`Ymsq+VuM!UO05%`HZCgk*Ia zH?%ahSja3*lZ^?;KAW2#HA82|jzWCJD0GvvFEVb1!0F{6Z56l^rI7al2Q!^JsZGt;y_~+z3v9Sgm`g3=FA~+ zLX};5InxPZ__S0N9=ITqGG_n>Hj53h&M1!bHT`2yBt&!n3tDVsCck7`aSUj1MEOex zJr;OJKXEOBDBjXkK3`mbvoan!uq=d%fuSPpB|2@wnx_E14CFD`AYT^`vh`TN*w@Ls zm9~O1Z2$C|@vEG3Y)h+YKm~w^*nwF(rVY)Vtswt_we294LR`K@f^34Wj5Z-gx$eum42(*+G!#j|z)@5xPD?~P@{hW{WMLL;t zMi1(dlXK!J)sOoJ^;-R|^jqSrniOrd*oZcd=-S5sXg9SB80fZ{bX2g=6nN zUw@9l8(fg4Wa{^LyD4g3ZgHTAuBVSo>9@ZSsmp0wE3+h1C_diH*#iR6_y$8OxF|dpzO(GD*Kl+$rzWf0G$@$m?@BU8XKOuI5v0rc-g5ab>_l^@L;<#5h=Ki zAS`ptO<959rtS8C%5K%lScHR_5y>Vy03sl-R2^t|0WVNfjLdVm*Tp%y>h$%#bFgu@ zgEJqcJENS(7sl|Wu(omOXiNh|A!1mut76H$PNuZ`bF_Hrf;~0!wEte^1Na^6-YJ^6 zOw6>{nW4-wVGuz}(=JVs&ybVlU1eNL0(T;`04+rg0(D**l>(cFwUic!g*vK~ea2w3 z1^(7U9%wZt64Ud`7g}d8b+_T!>3f!^w~fN(pmql9u&sDP5Lup@ zE)t_vQuN(>WsE|m%HdW_auNJb@lH7Wv2M*#oWr*#P<=!j3Z0kco`^>b{#-sh=qcx> zB9o2dqta=FR@9fmrYd3*y;s4mRd{lRvhqxqU~f zhM~=m0V2VMl7~xck(}s{Xggwf=IL3JgOUKjXz4;qLPRK;BCT_mj9tcXQDhIHhzbCo zp#-(QhBSOXfvtgf?%iv6JoVAStD5*-cG?OZmdvsJk~qX#yHBeQlEW2%mS)ej1+Pb% zNzA&O#9;%ISzKwMk_Hq&Tr;C$-XrQPQ2N1}sYui(Yy~$ufNHX%M0Woe;lgD_`v`udpDb7cZo>XK&EDX;tdF_yp0_#3xRnXac3gkR&Nf%@^yHSi5ERIS zI8M)wUucGR6U(<^bgtRI_@=p_Bho6~SU|Zp@H8zzGLio${HHkVWMK$G`>NIjF>&#N z;Qs=%Ft#As6!I~Ww<&Fkm{tbbW+=j!r)sAQvFzKT%2sgb8X=I#P0W^XLuO}al3sRx z7vXJb7e=SQ(_dWI9sa+Kh^2Wgzpt=NF!^Q*SN5N*nqV5$OpjrVbq>maJ#Y-Umr?gRs14M=&cFdQW7|IomL69vto zT2Oi%gGwc8z(Q(`(iRa5jGKl`L_Hl2UF?*QJeP|&%L&@ROaiAM_v9V$WXN@!;UYccP328y&T0Fut zz8i$Sa4Kd3H$`4ZCh_WGOQzR4uz1!%Em2CX7Ia zH3gz3AP-fa*2-`9-+Kkt6an=s)WvQ7B1@NfyCsio32x$2KYdbak$i~jL7@#kSO4xX zF)fG{Ye+C#>SwYegj5E6yoC|iD%l~P9n(+I*n-qq*(tuc<+5yntejN|^)y;C@E1;# zq>DdT2k|jo06gOKBjg01i&onmtJ~A4=7(0wDiXo&N4w~@ipX_xgs^aMx@e$>Y9Qg#X+hG0 zmf}2vpP=Tf{^B`-Dq;v-{YL?17!Te1>K`pXb^DH^_S}xJeaawihPzN#$01+Nc0hF- zZT%3-k;{P#4@<{ch~Wb1{=R~U^;ry>oXhV=L89qB(v%IrV7}u5#=IH_9)>7)Vv2_fdWvgi277*>WH}~60Un=@3+nOic>&QO_ZEcg(R8XT4m~l;1 znzVn6-DNSrd1<1y?adU})^ip}0=YaWLT>O<|FcxLm!b$dOGOoPgXl0w5G65p=}XCc z0aj!i2ERG7216J$d`0usF}4pqzt_6eWE46``^>enW0VsCitIRP~1g zA(R5;LyFxL)O@ddTnP~Sk}MwqDMT~8#7bn)&ZwYs#9#hXY-HG1w{nr}KZl#{nwuCA z{}hl|e`+f~Zas%jOf{8$6cDr&Xn}he1&||+gIys5Uto%80S89-%bjB zO$?ORI41G51Egb15LQJKjNmScyQNJ3@Tf>j5ZH`qVh=f{&`C67-F=l}HNh^DJR&x& z9}&|@R~2w$Q9=VS4*>-&($C?Omd{Wu;z4ij*?8zavOWYsqguAK6#npV3Lk~baQm*y zP-(V_a(!vWNV&0gdDP`TM=@8w+W<=>2H<%GJ^s0bd`|&(MxgH=azQ2v@aL|jzGutY z)zXx^2jrzqnEjly;U41P(G;sxf+U&44Ck*wK&%W&e2&^xp+{0%Mk#`?rWq>rO=rxAB!V0(nsvkq5Ffg5oSN;(jRUMxMaV{KGqD@98f_}hM4hpzTZZBS_ z?9WSJOcC@@JjFhh$e<-DdP#Jp#fn8f_(8 z;dp-^xdb&1If>_C+tT0}6Y^%*@8w4im9b_qhw;|p7uuvHx_SMP<} zG-TqyqKt#rr&5R7U%}NW<0R`Pwl`6pbS0T!V_k`FXz_RUg>y$XTBF;-IeK~F$+Ef0 zWq3-jfLk!3Fx116*Q+ZG6!F1v<@C5nWq_+RP*z6v*)>rO{F*TI5(PxLFbkZk?(`*& zmgcc7({Y*i4H&|tGxOR}*Wth>h9;yzjZ&@9idyNo?tjo(e)6_E^H(Gi(V37EbBRZr zdZGP9e{2L%BH|Ly1EgRjXm!MjQvmpQ&cm0|5{&kLkZpnCIsB3X4{9&V>xM@gyBo93 zC$sIH*)MCmyKCEf&t?yIc4vE!HfE1^cYfSm`|0LvZ^wUc{AF)rdvEr5WA~@cy}gYG zvmc(#)*e6J+FW1zVQXWywf4(rvyH#3Z#>?c{qksId$z+%cK<*2-fg+9tGoBS@25b! zYp3KYkrH*XWtUY&Q|1>B=dHsZci*sP z+W+n=Ui3@v@3wYc-tTSl?dCrF+S}heIA9aJf9o}y-sH=zosI1`FWJxi-uJv=XZNtT zy~W}9+2Jnd1_<%n^mc8C_rKoU-}n(=t$)9@y#>hFc<*8*jGP_j`M9 z_V;!VHqoSb9}wIEpL5pT1pSaP3WR@+TJg_Z;-B> zdYg?_-wRZmy_cJ>Ha8Bpe%idRAF|59o7WD$jopJoy>oqgySKBs!EV?0f9V};?*Fv4 zVNlrL+*{w`0`_|wyZifk%kEA>s+z(-9fCg-g3~nF%KltOfflz@k!#w_%oq;Nf!muu z33K147Ge2zZZ0@gb z-|rplZEkGoA0RZO0$y(W9qt@(R-qgp#7lbX;GRfOG!yvs1{xJz>?C|j3ARF2A?+ilsJw3|6C6>Kpr! ztN4DCpRK?A35Eri2*P8NTS4P|WN!#KCQST1Wbu{Af@U3CGHXzhHTnnj9nv^(`=_ew zPCJ{OMqHnffAyRc5|=5t*j(D8x#;qerIr#+$H!%QIa2s-P+44aK4+@td9;uB5nKvT zk`Nsd6+MD>38s{iXMp)Z>M^p`+)}A^p4*i1CMso3N4ZcZ;p21kKE*uM#o!McI7|2g zef@}xXa-nPFOUB2%Bu`jJlSj}aT1vlD8UWaY^B#^H!D4ZLb^(6D3zyzeR-LV<$b-C zIEY_3JG+xrz;ayM&DAZlf~G2-P?BLL64)3E>}cmD0(E!iphJh9&ZHm3I2#&y;Ex!r zFg0dy{@oXkQmOvYaQK^*Cu>&sH>yPb?hA4iu7`5CpnFLpS~m;&&{~ronrXp@zesP| z!FY_5kM8PfLA{m|81v!*r%Xt$7?(9O6NHZX`a>Tx(G5rNjmyyG;b}v?1UHniX;E;w zAK8??bamPMdT7=BNRBbSBfr_=nPz3nRS}sCyxijVDYO!5yo?Kr@=H4>;WSNXkO_ia zMG8Ej@szQqrmcqGi70D!G4-wwBc+@ZUo-lP%j5{fn!`Vehuk)6XG`S+Th^Fz)PJi3 z>Tv$>WJTWMlX?ZNE${1Qvqq}&Oaq7rE{{5d=&Zua_7qt|&W#eS`0y`#lS(uR0}SPS z^td^tZxo=pCmBsn)MAl0X>-Cw10+$hp(XHY`6%QR1a2T@KfLm&-^!ISBW(Ac(u^Yj z@!-YZoL_&d5TGr{5@viIl;(ucVH-_$< z9gLT&$WyZBIX~~nq!QkVAZ5A!x=nutkZR+8o^^H6liU^Lu;b}1&X!*GwMO_r@xFN$ zy@z+jtV(y!kml0%>)Zj87rNfUv~o@II|bTJxN;}SPY3se;O@_JSh9SxX(qKSnP=ac zmtO6oV5A0Xhw z4b~cQbYiRx9c1!OXFWGv!87Nq+BKNS47OojJ~*>n@&n^u{zSj`hXNko(1{oo0?#iE z;J%2@-Vs+qt+>8^|ILF3A3l6oJ-xhHr7Gn?_=iRhI)?6<4vZ)N*GCV3)tlodIIlHS zeWmWd^pk(4U)E1;>!}yhmJPV{Ux??(;X37&CdZ+1@Ay`!e2vr~w5WGqOa^=9XP*8gEn@9qK^$)uGWZf$HB0h)jL=@x4+9 z&`rTO4uQ}4WYmP3A-Tgbts2^)!Ir1pq9ZW{UEb25im$vonA_V`)&mKJq?4O~O^DUU z4)|8tV6l-4l~Bv2o_)%G$Nk<9Z?+t-H4o2&3m*TL0RhgVr()wmDo4XV&{OXWoQhLh ziQ6f~UA9%aQJfDyLh)*A$0uH$V!r4&1qS(-vOPy~Mw2Sf?@%1DV@OS;<2b}yE71y8 zg&8k>S{N*l#=Gq4GRwX9Dha9&7^5JsDb2hhdzM zV_P*KSCjO3^$8(w-Hmr%7wWY)%eGz;q^HSLR8j)JlgL;=r+EMF43E)}=~E9ry!*I< ztXnxheSg0C?)u{V^QsxscCwJ>Q7exf?w`G9Uv+zZ){=Ucygq1A@&;7CpI?97AH4lh zWd@h0zy7-R=+TqMzpg!g`0)AjuOB~>dvdapnQ|F=kNo!XBBZ|EX^DW%Eso7SEB8n1 zLK~FkcZdV)ix*A(V(t0Y&+qrvoBZY94#h& zi}|OJ`4Rf*g}x*scE)v|($UlGbe0HJ9oqM9Yo4=VelT$sSPwsf*pwirkz`#U?ZDN9 zYFyx~uF6@E_GuGon+RDWBTn}I1t}$9Hn(g4Z2oxVR_txB^}xvK7VK^6Q^^i8Ic{F> z~oU7qCy4b`y;Kc5PPPyPjUrGR=FG0 zpcBrcS5mG!@|}`XuK-aT2wM$DjHSFLJqg3dl1gsKkfe>M6i5)6UwTIs>kfS&9o?Ur zv|e_h>3k{uEwW{1mXFaHTK+fJ!h9#SDuAwbJ#5Wfc5Lmi!wQD|EbHzAxA1<@CnJ$; zp{7y7SHc{)O!TGz0Qw1d5Dm#6K$QT+Ic@sX1y=rb*edIUk{@q(XzblRp?I*h(W8vkEQT!wVvfcvQa$ z`q5r93h}sX1h}XC@c>aTA=!(dg@H3PZ#uO~d(N*@*_i43dN1kHyi>6PC78|XE-Dv! zXe#5iGKdW=ypV-5UQK^+qBXda-IDu(`c?qk(V2QerNTuj!=jzIPn`3nQyh{@>5qQ1 zE%Q$(I5O7-3|~*A>Qn0KRaCsCj2XQkS)uHMfwx3x)VW&ptNRlw1oS&^zlOTk`S?{u zLGT=fO0QToH>jAlbgF?(L8z2Nk7C}K9%+3nbPgK{kwXeq)s=W#ftcSxq5}F!qevjP46V-Ex=8+ zACwgz(!JFGxaj~OMzXlYd~D!w&1HwT95$*{## z22!>sAzR@lyEU$4yG#SzKRSE1O?k*J^=!iI7ZSl9B|d?JC*YzfSYZ=uA?Zv$%8Uf> zr34~Ntk6NX1`ecmMTBb}}RG#x-Qh3}~isO|Se(cP%3s(f?SYFsVa8td7i)kBON37>p7JhDXK zRC?q!PT&jjBJv|Z7irCcP1-j9O}054R-9gu6WxV;G_ZJ+pH`cO=sCt z>corRD@e-Q;3Y&%T9IoEg2W1q=LRcB!0NXLFYHVbaj+a+VSa~ho}!n#GK@nz8=0|^ zcU=j|!g#R?08x>2qA*ADn5pK@sID!1K9l0BSxpK%EcV1J<7D~a71nGgAJnzF(a!PuU zIMH1wrT{}I$~ZPpu#^>|m9T`)P&8blTemfJr}sDi^JaMc?Vf7}{s$KD08>}88pYXi zG;|JAA`($^m{LO9kGI&t8uhr1_eKMPh)#<|#Mc6iR>0NA0A)&cVO^>n3fF&@x=b4Q z2DSm+iWMT7`)Cz06fGc`m{0xYX5*VE6D#|rJ}(#1q6{*0I=SH-v!2#Rdoc@ zGU-ZWPIV*f2sgX`44or>e^+j{?j_PzO>74PzRE0{iG9g95=(8EhMYPm!CHOevf)=8 zU9McSi>)Z$u}@({Ob+^q`lyKtCwPrsom7665J*80#CVyaez_zwT{e%Tomk}{Dshb1 zk`U3Ch|IHV<<0?I$KHz zansq%DShk=q*7d)@B=sPDE4U~CbonWa!yr2JKfsMiFx^A@v4#Oht7wJ=}J1%=iSGV z#Xf^DjhiL!iSNtFP!}Zh0H66MlFf&gxdoKYtxHYDg;c~p!vCPvY~4F={#Mkt>h!y! z{-d;yCh8kEHfMtCa}rbBjIqiF#wYpJXmBXk3oZIMEBOoR&pS~%Iz+n&%|vc36yPE* zc)MhMq*C|Rz(Xp|yJ*T{w-Z(d8XfK2f}c5OOdVcC43pH(V33~;z{gDh zZ#j)-G=dqK9-imTV;&-wb8>}31eRb#B00QUzGb9*M57C8N_N?oVBM9}!lVj_s~N#o zFEZCE7bN(*gI~o13X2oyFsNf1OUqE1;E2JAlC}K5OY(w`z2BZ|kj6sHfu1Cw35hY; zmhA{bBbFU^$fzNVyejxV`qoG;V_e8!@v5j9P>!d_2qds*hVlH$aUhRxvGg+{G+0XL zZP6xEzt^i$GMS1dSTI<2+jj2~glOEGf2dJ9D)u*N9>iW;F8ZF@xPkxmEhw4OvdN@T z=KFWhyKl4!^hm>*$g%Z)y{c}X?{90}-fBY0Te!Pf7jzyQjU`eS`e$^u%~_s} z(WyDq(6CEiv@mZY`G_0zCqiYP#2!KzaSn`2C}cFe>>oi7(#DjF0m9envCtz80kQ=w z$&O3D;2v;zieFipY*A!<1u5p{P{2jv%~q;oDt48(Z^R~jqhg3!K-N!lY0tcv@O!YG zcvpTa4;$B%EC^2LCOI3ODyvz#>_k?cOVM~oa#ZoTerPB3U(^8b=v?stdjKH}OZOtc zSH1aJ(k*qf+?`!^kd*WbII??nxd?NJ`LUYggAF_{^XY((7Cz zE;o)$6%MGHj6PS(Y4^p8tw}1Wmcz8f_?SH#E~b%Del&Mv^1E+)geBlyhC68~z^9|8 zj^5gYGe17n8dt+}+gV1ExSGnRV7swCHOa$J^@-C9gNfW3LR)Z;n5#ujLfwqt zQbMKxk7}kQDWi%@rT{dTdMJA64&&QZaFlV&g+wWf`DVu|ZiDiZ@eY^}Ey?hVtI5{@ zCqR6Zn;pB$qI0#cy>ZLz_ICI4f7;t^*%IToE9$6|j-{Z4d&|rxz@wkILxevv{HFjF z&Gt}L3yhJV|BpMu?N3WQgI#d5LLXXz%4$(BP}0=%o5ka$k0sw{V@ujhvVd;qZpHwT zW*q3tQz{b%E$!O_2Dt>oJaSGqm$FObGDrUHaKWFWE4S_1@^_r>ZSJJbVhV(S5fR6x zmjr+-$LST{LnRgO)?;e46>P0u+*eGFzxo?3qt996hVg&mkjdCqhOdULK(fTAhg?WR z3Lro-@v*`g{%5`R)2vVXy-uKRvhO`j%p8bGi_zxjE|o*_Hja>yT3&_Y;-Z|WY9wRE zKx#*Zv&~H;*P`mBAxx*|=UN2o{>Z@s|qt0t`E1TrJYUdBrF$p&>b zCOu+^vG>-~M9jR@ad>kowIE3*`F=_S=;A#VJ{XnGP`#w(xvqdQ=LMt;YGXtWjXHxdqPzsggG@6t$N!nKU9NilL2NC}yF~@=(K+uFx z+5iKy)rgM&XLa-i_y=C#07xJ$H*`L84sw5AqjqDj_g+LIiU*$v)h zA(IKKquzO}p$iyE@a%Omk%PodO#~(4MQrS;&e?&<@`XdQyDllBGE{b!{HgV%fvcDnH> zrJ>wlB%k60Fl`2HLuiazmYNW!L;}NWw28(^QsN#`d)mY}xzo=smocHy&QdsIy07K& zFO@Xi)vJ=*raSxEA}(Y)B~Y%XvdVZ=BnUS8obw~oqq&k4 z0GD&QcTe|aSuw6Wq-RG=`58g+<%&(&sQMv_7u>_!%T1zu%0>NG-3~nSJte&gu;4)I zX8q^&0Izmc(;VRfu5`R1_}G9EuQJvhngk*y;$skf-d4qHD%~;>Hg_hb>|MO&qYk}- zo3tqV2@daLCAfk+V*2q{>W9qzheoWOo7Fp|S2#wSI0ou#rH@!wAKVyR1>&lsMR*3! z`1bEivsejYNL7}AZ6;aK?CaftCPQbJ?kM8WH&{#%4fF2hcXWlyUP0tBjj%tvqHc{? zB-(?UdPjY7(@-VClB!;BUi&D5@@R`gB!@+u+%3eALTIUI%72gM<-~hjEqnJI=dDIC zAqLd>hJixbF_*%v--K3Vf5iZ0hk++`0Vdzldm^KBDke9}s^nwF9$)h$OvIuP2H6-0 zqL-L<>AzI6TD7=lnF_5motohLmB|x1*&?MSJm&)GDQ-U5a`yX1mV48(a!WS(M_J2y ziHL)`YGon*&H4Y6SLG+`(fb`6YODs*SDx!LZch16Cyv# z>d_vY3~?&xv*<5Oo}LJp@HzkC0htM=Z8h9x`3Py-0*YUK>|NNLhcx47^DzuAF*q#y zr3C>Hy))$=)|jD-Df>|`Cot2}|-yK50&@?leE7Q<&GIvcW7Hzmy^Bmdo! zCQ6jpbITV7g6Qq(tV3?IrNIVgkt4_u8>zx7;cLz>M=K|Njt5ii|jt8psF^`Ee zxa^Ly1tEb+@+h>i2T}LrOOuD((BzEqwbq^^RpV5XSIxEIl$-X^VTW4g8vSj|H>hp_ zAnNHr=^>Q1tMy0Yh*ioimi_sSw|}$(%Y2klOwxE17`RvziMwAG4vM;TpN85e~r+Wcd;)|0EJq=;e%lyRip)?DHYhO_YPc&|u@kH*$Z*>MmV+(Q^Y z35jyuS>g^kEogc#|3WvB5TamL3SZ+xq6czg% zX^8J0sC(6Z3NsZV#}J#eT>kG(4tHc*Y!o4d)}*>UD=JrzvV_r)&_Fcj@&n< z`rVENt<@$W3%&lN0AA1!O0Bj`(&xB}=j@0tdjYw08LQ?rCnvI=c^lHT10k;|B|RMy z`4<9H0%wKZp+vgQND?c$oX{Jas5s{ABP?65&CAD@u48W+UQjp`FB%ad*1z@T)gWYY ze#G=eUj8xh+~u+UwYf?Ts;>QYGVpx$5E39B54f#%i#hQ1a=q_2H`d$j!f92{V1P{; zkkc8Tj_T@LOw0WJA2zM8{{DZ)sRPcHZSa8qGdH;W`M+lme74yGQ%kjPXYh~aVeqX2 zhd*PezywRtW(}TJw~XnFh@duZJ)UqK8u2*DaA88;j7$;pBezcZ1B>Zths0 z9opu9x63CXRDC*@(Jmhqdd|N1=;vvWqPZeWqeah51tBvx#&-=P>*S$u;MP-APHwuT zx5u}5bGvO`h@DQ|@F$dIIo9a~cc(`BBp`J4(64pM4))N&>1fP`Y17{FMzUk9r~YgQ z_{jg&>nF$TE$43b=dWL|zyazejx!(HJgoTEtwIZ9+fAZy0)1=tsM-Zp@g&tU2$k?Y zF0k1b5pU*Q$xoO(5@5Yd(aC)w7g-iJT~zcH6LGQ`+G^!!Usvk-HO|RoDJBhrrt>wWYpi?a33Z9Lg9fu+Yk5^9Vxb zm%wDo2kaUyFyqpqXgRF!HaevQaxu>)j3JnYE1Q4xRnqXqi^hb92C7NzzQZeGxIyC; z%N%qd-3qMp2@AUA*ju{u@#B|Bw zv4nYI02icZ3|5YbF#m=hpG?xhCHbq=GmKVNlp>&71k9b8cqJvRxNwf~ z47UE{84WFaP7(5Gq7$Z_a9(#BN1$RD8L6JKBZ@*uV2(}%l&2b|Vo0jW$sQ4V8_ihw z*ljcYGWppqL)Y+tFUq6u_G}}vRmW}M{ zZn9UZts_0ML{k;0tBGFv&wq{48Gf<156=2O9<54mpFU;dCr>HpJ^o*`eUty_6VAH0 zbvJ<-{TEzT_wbJn-05%(FK?2?v#-B?^y`y{Padv4fBf_bzTVfve<6LY-`lfNrJOUA zz__-$=GQZu>wE0=alU#AK*#y!n10Yv%eA7~hc%|f=OW6SYFe+~;bcnX-La3P(l&1m3~uH%NM>|jHgr`93M>r1mEL*@h`(^MEzEu`e+*0~$B z?^36g4K*L=|IREmO8{0n1OhYF-_07wp9>fciV6_4*if6%;ngyrU@c1kixOu&F_TsT z%4P#1xS*qA$uf;hPt>;tu(!R}Ly|_)e4iO*)?5%!q;+leQ9*?afiw_i8ITAyShch1 zg!*WgOcu*>6bh)5+Zm8)9Nk+XAjA8hN#2?pO?pG~$Eo7ffNkY;$2aFRTCN`bl(2kk zuzXx#S@3&VKx{xvc+>;{AIt)33r;kiv`&@YU{aHukl&F38hQMdfvF~HpAvpz>}#t} z68tvH$iuxA} z_jUz>do?67^^}x8M?1d$r-a*6gWJ;#x7@^K831Z+_&tO9c)& zP|>vs=~$~XOO)IE!zxXC>z@)o@Q-* z(j$a6_jS?c9B@*lmT?lo5h?G|D~?dltRS0geJ^*p=>KtcadSZz04t!Ogou$b=ZN!E zw1`PBsZ)Kz9q;gF#;rQdi7RZLy}taF5Q z?~jY~Z_ZA>`$B&_d;09z^GA%$9?x9ee)8~(7ynz2|8sjyKVOmS&_9e%J1mdAM-QLP zX7D^;>2rbW!lc`PETvp#j807JX3lJSI^7sV17pyg0NDmA_TsPB!9L+>kK(j8+e$}p z(}SaN4jgPk33bH{dRpSCs-xQV`5`+lZ<||IW92)Mp=JGJ*gs5!*x30p2(gyiKu3N^ zy6D54Qkjm4uAGWb;~JV99YHL2l>1U38k=`}#$L=no9t3v^PtL{yivrX3JE1k`{(LX zC%<8_Ia&g?JoG7(2#!|J7d&xX2Yj+Sv#j>Ps-^UvQ?4ZUWy4L?YsfP+db z*szL9niQ)>A;9LG3bnN4Gv+Vg>y|&??}TC?#we;}!Ru$uPO4Tf!d6<0iL>FXKIZwT zK+tu<5?VH906`qtl~LjHG5{_C4!cv6eBkT)zh@3LFizo-$*sx+yku8OqF*ed)7ZQX z#>lhU%!ZOB2#wr|F(S_;J2EiD2*{$Nj|1%UR9y5rm2L?x4N?~FrRga|bI)y9*Coi5 z{aX!y1rx3u6lt(T6!B_WA9aG+zOs38#N1?w*~W0|+r%)Iy`ociBkq@4%Z@2xe~!o2FV_FbXJPZr z*nm1woWLzP|HX@Fho^2!warI;HH|*blkFD`Qv{w+KP`>US%iRjZY{r#N-MC(qKroH9|VpPL8sfV`CXtH>uBHyD|QA9*p{`a z9+l78v;U6hx`%MM8ofJvFWslK7k$gLXEh$cg@KT|_w?caC=L1;=%c3PMi`Wxx$pJ} zKM~GZv4+Mgt6g=`#;1!Qh*+SMnoYFK=Q@%weIJjzhmSv=McIC2vY-F8)>uTTTMnAu z4{GI=U{mj@LrJV7kAsePMfBTb?x+WHLRGY?IzL$v+hVR))uKhp!R1QidNX+I+)aIJ zbyvDB<&Xp1fZ;oGKQa+e3IWIgint0elgYF8?5ju5oAdkvc8IwqMc+@l=2?q28hu*J5ZG5k=`hBr!rl9&af%+} z@6=xf*z>SUEN|B_ZUP>%tsP$&p{ zIJZt3E zvv!LY|5-3P0Y*E+Yf(-XY7MXm96nPC9WR(c092ZRaoWMjH@&qlEo0ggWpgfw`I^g0 z)4^j9PXlSb?a^*NkFl8a8xZobzdDhE6Qr(IjO=VMMm>t3?6(Te$u-eK1duD<&Mmmi6bZuw1%@IP90 zZ2)~hYHozH=ajq$byLFG#3Oxl>6_nJdkK=d!Ly6=tl?&Sy!P~~ub(~r`dO!+@zJ~@ z_bDFAnZRx$cYluYKtk>Qb42;<7v2`-vq^GyHWX3bfCKImvSBPDh9j^Bclh~Ltzp%L z0uIux=57XDISlLPehL$_p-&|ns(Km^8oHco5r#~zFtn8gt54A;r|JzRBxXEVV`GS4 zr5SwbC74JJ$>VC5;`TGXcQI&u8jWUl+?uA*gw!7OVD?#?v42n1Xlkr*T}HPpY{_F5 z-W08`_EY`Yz?iPO0E0WKF7k^M^`(Z3IwHC%Qwu2*C2!(NSEs4q?>a2m|!#Ig4FQ?G52N!r!w)- zeGkFg+8G_J4-`;!+JNmOh(o#$33ZVsmV%aW~y8`te{fyV|& zg}>H3`l;HpTFV5PifF{N()Z2dnFW@xi*fDt>Sz=05}XZ3k5DncIFzSzb-~H(IxAj* z1zq9Y5#}DFS_mZ8BJbFILKR%w@X;@G7xmP8Jlsx_@&=Wv>3`aDh6cNfh&^7oluZMk z5`~gO#CB4C5N~coWfRCBujZizb;;i9QmE*^gtCL@A2!lcT}0CUfSOnGuj*Hah#Gckfy2MdaV) ztf+iKbII}C1Upk+&*+)mz!Rx8M+3&{wBP|;&8{nSTKfJ&^Gq|cWG*{8$#FM9cx*t& ztnnr>0*4yF$U#FZ6XYuN#I3NGqeL*af#lw=fTqCnROXk zK`hgXNv%Fj0z_1hxv}CPF_IkjAt_plmf1`7js~`Iht}G0KsrTkXfFX2fxdHM0_Fs4 zI0>}?X}5msdgr(YRy+0$r30s;@$TOPs1$XqaMh)+Yz6@mmKsUA_E(h^P>4KAu^SPm~JWfTI8(K*C%H_xz^P4raLD}$YLKDn)bz3MN+m>dieq~Pc zrVeVY3Z+X_Lh*7cjuh1Q===8O59`|zh<9X7i0aCmMKvJ<=LHfVj4~=!TK+YtJi2+S zptq>rtNs%>v+TgR7YQ#=g~9;Au8tY))Vi19k!K?saLNT03EJi-ExBb@dX;`x6ulM{ zX%@?##Jb)qwfI7|wKq>TxHv>b`1}gxTIsHhOE3pXk!65A=am65fBQ8*3ZEwBlJ6P* zXUAfXVk~bhH>6I$LB3fSPyT(=u1VD#ozhzWJtfb)K2Ia>pR0aJYzI*K98Q3)$Xqo? z#P6+UDtGM^-oLW@|KF}*6>~5+v?&rcOdaZu{FY|%Zd`s(6_kR zYN7*p0A*ev#!mSOtj@+)3is$B@L$9KSD3aqzqFZ-R;D3i0sjBgrh1CaCg+TQp`*Jyl5UJU{zQS(hB< zd^q&J@Geh6Pqou)Zz(t@0~tKCjJBE$3J2{BID+t`cpnB+n8CtEL9G@O?#0=Xf?(+r z`BuWKB%{DMSAC5IKXrG~sgq^m@KLgf7O27Rr`HD4dcf}Z3>i$&-w7+JQ#@VN=pY)? z$juBGLSmSo(8`7?5c8R1bOC2GpOLHm{1r3CF`<~j!Onx1g9M$m^(?Sx!E`idsfA(FTZC8YRA zdZhq3ZWFOR!Moxz)kP`5V=W|)81Y0g19;`5d*GjbPlj6aoL|&uaCIJ~gIR2{_%?;z zaIgNUW}N`60BPu7<0sLf-OX7Y#=R~au-pOUcw>3!#u_KU#LiW}$8a9;adU39FS8%n zeWf~|9rtrHU{$?7UZv`_5j_AMO8R;#)t}Q70edL^?*`(En5$)=70svyiNc)|W{{`p zu%(cb78hq7Yp@yBHpkqOk(uK~rHPQWa4?ICGp-krBFjsZI;=QF0gZs- z(TU)-$t#PzAHBzQN2Q+N>-wuP;2As=O26##PXOFw61)+$)V1p}JG>QzZ8dpr&0lq% z8kB{{R*0h?RmhSYf}Fj6wCNHFUhbEXr<#e`8B6pc2&H&?qbLPH-2df7naea%-dT}D zN_`A>l9~O+pOCfyfpmhHsO;$|+PJ^Zu%^7jF4>;ePf{vel4Tud&2x6-N5SGWA%1p& zsv<6(TY+VeC-pJFz}~b_EhG~ZbIx4+bmX){GL1b{_MEkY+ixa8y+AP?QNS|9oF+fi zm^ej}!m)6s*v$A{n5on)DFR}zx#qzM7Is5<#EbWYku0Kd7?m( zs6(ky@1>h86i8g7(uuX~4^HJMLOi8S&TN(8m~%_YqQfQHBN$3o_9g8;h1td-C$UTW zmBL0b$XY!to%2yC(@`#X;s=pH=OFhrYdOklu81F4i0mq#Osvr~W#dfWm_1+bZZa3= z82WNTqXG{V$}yGA5dFGL8$@eB*6XuK85*F|!svu~2RAr^{5g*eC2?L0a6P&lH%{K7 zDF(H7Lt7kM+iwleW+o^wL|S`W%&a1~j|VQVCYY@{L~8MHHM9;UuK368>7L7F$&i`= znd1HcmEDufi$rj;ox}dq9*0-dUC~yvH~LL}Wo{AUIJF2f*~QWvyL%x0bYJEolqru0 z{*d*`uV@ghWbj?17Q{VrnSeVi@k1N+;lt#=E?#v7<5rVgN}YVr#;>E@^%K-qvQU2 zX~@@0n%P}4*N?!!}yP5)C}0ZnTWA68ZbrUjm0)HFIjOy z>GAMN@KbJD-m0#*xdxdU;-vQ`wjDc7c*A>8!xCbF$>Ee@e{#9u zZJ&}3!`rg$FRfT{d>j)2x!2uoFt_n12-Tgy`5tthb4jL(yvxBK*1m&F1U0bRm{-l0ZgPNRUS-wH zj?OU-8*QC<#c{+<(#CBd6)T?5>4jupHN~N+2$2z~-Q;Y+&|Fck1Zi}G&{kArAEldY zW7U$d3Fe$(TGKw|HyQ8HwebIcQdqBiSP@NBhxaAO4FP3nxr9vnGD8L~fWbx9H(@e? zr12wxT&S&mOCUfb`b`+4KF<1{$U&>0MPq{K<_XJY^ZI%6SmZ1mcnY03uwwPt@sQA0 z+((J_+l=F513U5Q{+Ydu(e>CeW{@kXiF~+DBo&_=k*$OED=V|7UM|2(O$P{BIy87V zaL0tZWK`^-0RVpH^Q6!I1-y`l%#klb+Nsv#WuNkh)qgPB1j-$9M?$ zjaI?)k?u6d3at`Z+!`h}%`Q+;w;T@El)+UXXY~A!DIi^e_JR*+-{arujH;*5ZK#cCmHIp{1q)Ucf!w@og_|Gvx zF^kC&4)n;xwNXVw!*tZckO-v4UenP$dkOd0@1hvte>z>nIoM4$OIMj75CeiD0p@-< zZozl}!daSm(;UPL>p28D+z#9+3xvpu?IhH!(Q#^?h-1_Ai+^MnkLiKa3;ikh0Cx#5 zidr0Q7ye?tMUd(o~{JG98sraQd_j|0o~UsU`ljBs-nM5*ZAUd{ITZa~n^8E3mM~@$N7FuI^&(+Xz?I~SRX1Ya77q#Qo=joFM@@+GF@24nz?ao2w z`n}wDrh_E= z-m@TiBor#W>$cV5GGQ7On|~FORT}lpC5<^zBT#&td89XaDkVZ_aE4!xwd2*=r>haT zP^lpF=sd)#Su2JI>izJsSFesuM7t{EbM|v{!sXOASf;nyG2MXoqw1?dLhy?=S0S|O z=6=5mf8IFPMDdN2*H$<`M``4SaP6EHv(F$K3$ z5-mm!a*|obfC}3Pv8Bf*=eBtcu<4E-=G@GQ>f6eT$)YA__XRrC zCh5$v?7ME^4LP3P(Ddx;_~t_4L>fNX{W(vj50>}Zgs@QVm54-_U-maQBMQCV{}RGF#96m#a4^*ad_j>Jb57+CsvuyH)EZB?|QK8*ia^2hg-vT z*2XsYMD060A72`OwR5lNc=6oMcf%{;T-VIchl`1xo}_O#|+WvQzaU#c9TBXCqQN z%n;6w|MPRwCnc$jeWoVFQ|D=v7a7uUJ^nICNd94wY^J89f~V!UklTOU zEEcG?YG@_F#<@_e5X2VdC_AM=^rJQU{~VCK5_`42ciO8&zL|()KNp&m4<9}HYW1r} z4-ipdqkDpIg$r65D}=2)%MI z%z~1?DIwoIz~mF6qFkVA7XKQzGxHsD*N96 z1(Rn6wT;riX=!bD@t=wX3j~Z7lZtQRBRLwKNrI(m5&rpZfcqa_htT0-#7&O}9-VML zmY>ZEt53KU%T?xjDA&QziW{HLQ?RglYw+N-etu`2%ea9)$2Kl$EfGx7=cv1a7+F=$ z?+hoKOcYsYr_TAxh%KoYnwALN6%|tzN`UY!dh_+l@a;--E#|r4ED>u@$#*D{5^$=8 zOitj`yFyhflHQ1BF^ppzKmUSGuTJHN3&kOPXrUx8_ao3*a+iooe*r6^xJL@`n)AtH zns11z@FnJ*%{YA9TZcQ~9(Nt2*eY!D9KBC2$6(-N;7#}umsQIV$B9Aj)d1ZM&a;8P zNmaBiPIu7D0N!O3OB|chUoOb?1_Jxa=G-g5D1(N(x76IgX|x z1jju}g?sC$VZt{@gGe2d*SbUE9LZ z_g2inX{;f(8*zvZd+`%8N`(wGg$(LCyEGp} zDz#Fvp-iu1cz3R;DuyXZCDpJB5OtF03MwbU%;kus++1^_f5~=Oh$lCHYPj11vQu+8 zmnqaH-ntJ`AHrBhvXR3>k`EHvuLZ_cWNOi74~Q$|$u1x|7n4Fz6>ej=8B@v(xg<3h zc3DW3E#t*MxnP(=I5e|@oV38tr1?D-7U9EsExjALNNZn9+&O_dPSPaqndR;{xTWYq zf@h}|natg}gDEyt#2gFCdkOA);(A(|t~B9mG6MRf5NBE+-wW0ThW$uMJG%8SUE8y2 z9PJQ8Fl;U-Gw{Y<9ScD^i0$1_fsr`T>%DF9B9V$!)rgxB!VIX23x`ZCj%vIt&it$+ z6a9Q*Xr#oWzVKq;dZbg%p8Y(?GVrmG7Tn59_f{sP8>Kznf;4-s{7B6@QJ;WA^qwzX z_)Q;jYKTQTNq`^XGB8NjZi(RTq^AyE+~K?H-b9MdFtw;>aZle>V59#*8(5)Hvf~s+ zGM;3+L_A5kI=ftC7cyMn3d%h(Rwh)4EtEt~@0nq;thC>YUlBQ3WPK-(+o#CCyS{$^ z&4ULYK73fc@cgsY;nnE_2;o6T6xK!jz=o`mcJ^ERM0zQRuu>1B_{l#La@0?4>!}x0 zR*ggVUo3F?2h#%u-FS15rmq4j zZyo-)`{uCs^ZNe&`p)4mz1>&6^_^dOf48;s64{Mbj#3j!m6%rKYvCeMRrI^W{cA}y zGYusiOsZY5yJM8KP{G_#kpK9^<}Qr$AF%g(mZdQ3m3$~nmxo|VZYAwe}Bqe z$E9Tmw3!dF$hKeXC1IPAxem z!6E5eF1|z2dl1^iKk}1*N}@ERxvb-`8da#dDEBkVQ>wkGFIuo((@?nbwI~ORSsJcF z(kW;WOtt`_`KzR!;Htp_B^+v=Z7C^0i7$wK;uZ|kqv$PiLoKp+>o${4Z0FAqH*-x! zbl#VFl`Kb)9WJu|qH{ zp*)is7n!e9`>Z=C$X3YaWkb%of5}O6_-pM1->AUkyDxtIb${?S zrY!&Z>sODSKl=6Y^R>rcJ$d+CDH6`IyK-j3##pfuy5r=oSP6c%@@VxTk9XUIsg9B; z(!=HgD++W8a5L`if&I3&aJ%61Y(fd>)GB)md*KN{c33Dx4SorP`6odk^}<~m`7iyCv{(=JP%U@i>#pG>AMl$(4qyq?XIrJJ4Wgd!1)?e-+D3^-kdL|KTb zd+xzuo`e(_m}@gp+8w1NEm{(Sx@0zLr2gYy|L-ajm{;HJ+oMkR{xbJ&9t}3MbAg=!}dh=m(-(m+}YUOjJ$No)^Vf-;)lQo2C$v(YE35v|!>_(zGGe6n-sL(w3k$zb z{HBfD8voKbW#WN0#7-Fq%h-Q=Rm$Wdk9=xlucU^{)d&Jpcbf8<#FgS=$zviaVsWQ) zGE0gsYc`Y9?ie;Sk*xd70hZenV}rP9j{qvRXlEX*gQ`%MtY@1?M=fIGDy%6oZ8~h8 z#)bD}`9P^A``qqdouU}20DHbYdSaFfIFkXn2GuIi-_Dc;h@3uIJm3eWcIoxsmFv{D}7gsvSN|R$y zG~jL?SidC)13lL&CbY~cd62ox2r*L9nG z{OR0${Od2Q#=$}#N?O36z@FVu4+)psLU>}TgczeZ9#bU^(BVRf2Gg0=(gI{cnU;7_ zjT%db~Qk-ydsrvAS{2_-?bgX)`9x z=i(EUd*p|mH@zPQmzI~bXLY$nxrmL*Dt6^qKi=jJIrHt$&`njmRnM%e$KvqTXC7-E z03PV7l z;@S0M6a(ImZE2Hk)}RUL`Wij}5$^C@DGuJ8h(FYE_6X6+8~M-|!;WDpm3sA`^x^;Dr_Q5rmZ_eD7ILRbDMK*o%|}qDrkKdZQopj=RTpk8&F>Txw_@ycw8H*Y zIQWVCop7nam;yt3Kd2+Q=XJpa<0m0wYS&c9-jc_Un0~S*TfW1o{n31Lwi{%h@1tYk z4$I&W=bkbNj)o^6zj(3v2?l}Bq=7wt_U!4Cr_Y{d&uLQ!dp4&Iw)PC|&B;qSXwcoU zs-h)~K|v5P$o*brVugGM^^kCMl`Uy`J_(nh>kOI1l$vlpR145rvP#_M2m@vz`p=i6rp#hHk&=6w3 zZa!;`HXBM(;=K#{2&#K&XldHPxVCe*8P`cgk)BmxmbI0IRh4cK1e97XgE=YP&5*l} zuFZAED;j2K%mC)(J^Pev_mWTNVG4(chopDpP9(Btyj{+}|C_odSSptCL-|m)sH7lF zunf<&z9>`>SqnjJN1B3p1sgvDb4?tvSNli)l3)7-?2<$jMNIi8kid+hU_o|U3YJDI zG*B|`yE0-Jl|vnEYde=pBE&A8BliyUi)G$`+1%wCEPgKNS=mIeHrpKPMwdoI=fPxd z!W82H0G)3;wWW*qXR^dE$5>sn3VI*>Lp^6O<8PIDjU>s)TzwPy$^;j}Q{x?q`=)-*Wfh-cg;K^`<^ zb;E0e>QkBPd3VWJlyZkU+K*t3cNVdbr`e~RA&JC1$k0aPy#VPY$O zG$yf}Z}?KF5Y4Kzl_v_Yl2~dy2#~`zBir=TII#_0PBKjamEdO)uJ+k60_@b)aP-E; zC8L`h>Mp|MR_*PuYW_sI5BjrQsYWb@l|kUK$*kR=HYkHjxfW7(_){!kcsjKEZ7_1a zNbMfYjc*A{jfyNqV+i@@%-l%gXf$%KWe0OczHEZTT>*1S&M5)%;?zvR@sY_$OwEJr z?@YRU%DAf4_FLf(JI%5PNJ#_48YuIw?I!qy{}*mQaZ4k*NR~%%X3m=AA5H+cMG6Q9 zFP%JT81}gBP6FCjkguBgDsEN=AG5C{36wdZI!)91_*pY*My)(!^sF*KHDVnPffct64oP9cvfE}}Y@h^T*;#Na*9kHlo8TllZd05n4Jm61CKAk9#Y?&rOnE}+DbqQ6{)`~nn=8df z<^vM)%m%mNUIW8WrT1H(cF_0okvwx@=vJk>Ba7Xv$TGKG;bnQ5Y86ZcW|EeNcV6+6 zjxFALjq4Pu*Q@HHy7Y^-6Ss~(NLDwjd#;)glZeJMk;H!>E6*0OkCTZekA>z0T9LN3 z#0E*Sd}svs?0xoQZ;gR0OEUm{J>ge-n+fm6kAymJrTGXM^m#qoxvV=uG{=jdpkWg# z>nQRm(y!D4iK(cZDyBR6P$vKZy1^%8uCiu118QzEg+fzmpJhfOSkTCJ{xBKInjHxZ2a^%+1W1$o@QiXFc)vTFgx`?ð^1rums{U`MFaV-Wd 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

DAMrIHmHDRfmO8sSM+l7J{WCo}e1T%J1Y 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 Mf8}4(Rpu-I3y>O}Hvj+t literal 0 HcmV?d00001 diff --git a/test/files/LICENSE.nodict.fodt.zck b/test/files/LICENSE.nodict.fodt.zck new file mode 100644 index 0000000000000000000000000000000000000000..06172a01a5be4eb0f3b5a13b2d0a99f9b587e06c GIT binary patch literal 131073 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Âf-VE8d=0fDoW7DuXMrwu*ddyCK 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

X_kzOuEq*e7 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 a|ECtO)#S5@SsEYtjq6TO`hh!;^!)+&3ntqD literal 0 HcmV?d00001 diff --git a/test/files/empty.optelems.zck b/test/files/empty.optelems.zck new file mode 100644 index 0000000000000000000000000000000000000000..0fbe0d8b6e5b3a01d21c483f56fd0260c0087c7b GIT binary patch literal 146 zcmZRGa`rZCeEoUFf!S;0-tU~|;q$lD}sAc*7B=8GmF% zX8rzhVrKqM74>zFPf})2_E|D@rgTNnj?kv2rYY0>3raHc^Ad9uQgc#sQ}ap`N>YnU W7^cp^Dz0F}Fr~SX0Sz=XGynisXFS3H literal 0 HcmV?d00001 diff --git a/test/invalid_input_checksum.c b/test/invalid_input_checksum.c new file mode 100644 index 0000000..0e08081 --- /dev/null +++ b/test/invalid_input_checksum.c @@ -0,0 +1,68 @@ +/* + * Copyright 2018 Jonathan Dieter + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions are met: + * + * 1. Redistributions of source code must retain the above copyright notice, + * this list of conditions and the following disclaimer. + * + * 2. Redistributions in binary form must reproduce the above copyright notice, + * this list of conditions and the following disclaimer in the documentation + * and/or other materials provided with the distribution. + * + * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" + * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE + * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE + * ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE + * LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR + * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF + * SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS + * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN + * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) + * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE + * POSSIBILITY OF SUCH DAMAGE. + */ + +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include "zck_private.h" +#include "util.h" + +int main (int argc, char *argv[]) { + /* Open zchunk file and verify that an invalid checksum will fail */ + int in = open(argv[1], O_RDONLY); + if(in < 0) { + perror("Unable to open empty.optelems.zck for reading"); + exit(1); + } + + zckCtx *zck = zck_create(); + if(zck == NULL) + exit(1); + if(!zck_init_read(zck, in)) { + printf("%s", zck_get_error(zck)); + exit(1); + } + if(!zck_set_ioption(zck, ZCK_VAL_HEADER_HASH_TYPE, ZCK_HASH_SHA256)) { + printf("%s", zck_get_error(zck)); + exit(1); + } + if(zck_set_soption(zck, ZCK_VAL_HEADER_DIGEST, + "gbcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789", + 64)) { + printf("ERROR: setting invalid checksum *worked*\n"); + zck_free(&zck); + exit(1); + } + zck_free(&zck); + printf("%s", zck_get_error(zck)); +} diff --git a/test/lib/meson.build b/test/lib/meson.build new file mode 100644 index 0000000..96976c5 --- /dev/null +++ b/test/lib/meson.build @@ -0,0 +1,2 @@ +util_sources += lib_sources +util_sources += files('util.c') diff --git a/test/lib/util.c b/test/lib/util.c new file mode 100644 index 0000000..a1152e1 --- /dev/null +++ b/test/lib/util.c @@ -0,0 +1,52 @@ +/* + * Copyright 2018 Jonathan Dieter + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions are met: + * + * 1. Redistributions of source code must retain the above copyright notice, + * this list of conditions and the following disclaimer. + * + * 2. Redistributions in binary form must reproduce the above copyright notice, + * this list of conditions and the following disclaimer in the documentation + * and/or other materials provided with the distribution. + * + * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" + * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE + * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE + * ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE + * LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR + * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF + * SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS + * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN + * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) + * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE + * POSSIBILITY OF SUCH DAMAGE. + */ + +#include +#include +#include +#include "../../src/lib/zck_private.h" + +char *get_hash(char *data, size_t length, int type) { + zckHashType hash_type = {0}; + zckHash hash = {0}; + zckCtx *zck = zck_create(); + if(zck == NULL) + return NULL; + if(!hash_setup(zck, &hash_type, type)) + return NULL; + if(!hash_init(zck, &hash, &hash_type)) + return NULL; + if(!hash_update(zck, &hash, data, length)) + return NULL; + char *digest = hash_finalize(zck, &hash); + if(digest == NULL) + return NULL; + zck_free(&zck); + char *digest_string = get_digest_string(digest, hash_type.digest_size); + free(digest); + return digest_string; +} + diff --git a/test/lib/util.h b/test/lib/util.h new file mode 100644 index 0000000..6e52574 --- /dev/null +++ b/test/lib/util.h @@ -0,0 +1,29 @@ +/* + * Copyright 2018 Jonathan Dieter + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions are met: + * + * 1. Redistributions of source code must retain the above copyright notice, + * this list of conditions and the following disclaimer. + * + * 2. Redistributions in binary form must reproduce the above copyright notice, + * this list of conditions and the following disclaimer in the documentation + * and/or other materials provided with the distribution. + * + * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" + * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE + * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE + * ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE + * LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR + * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF + * SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS + * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN + * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) + * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE + * POSSIBILITY OF SUCH DAMAGE. + */ + +char *get_hash(char *data, size_t length, int type) + __attribute__ ((warn_unused_result)); + diff --git a/test/meson.build b/test/meson.build new file mode 100644 index 0000000..d010b92 --- /dev/null +++ b/test/meson.build @@ -0,0 +1,307 @@ +util_sources = [] +subdir('lib') +incdir = include_directories(['lib', '../src/lib', '../include']) +empty = executable('empty', ['empty.c'] + util_sources, + include_directories: incdir, + dependencies: [zstd_dep, openssl_dep]) +optelems = executable('optelems', ['optelems.c'] + util_sources, + include_directories: incdir, + dependencies: [zstd_dep, openssl_dep]) +copy_chunks = executable('copy_chunks', ['copy_chunks.c'] + util_sources, + include_directories: incdir, + dependencies: [zstd_dep, openssl_dep]) + +invalid_input_checksum = executable('invalid_input_checksum', + ['invalid_input_checksum.c'] + util_sources, + include_directories: incdir, + dependencies: [zstd_dep, openssl_dep]) +read_single_chunk = executable('read_single_chunk', + ['read_single_chunk.c'] + util_sources, + include_directories: incdir, + dependencies: [zstd_dep, openssl_dep]) +read_single_comp_chunk = executable('read_single_comp_chunk', + ['read_single_comp_chunk.c'] + util_sources, + include_directories: incdir, + dependencies: [zstd_dep, openssl_dep]) +shacheck = executable('shacheck', ['shacheck.c'] + util_sources, include_directories: incdir, dependencies: [zstd_dep, openssl_dep]) +file_path = join_paths(meson.source_root(), 'test/files') + +test( + 'create and validate empty zchunk file', + empty, + is_parallel: false +) +test( + 'check version info in zck', + zck, + args: [ + '-V' + ] +) +test( + 'check version info in unzck', + unzck, + args: [ + '-V' + ] +) +test( + 'check version info in zckdl', + zckdl, + args: [ + '-V' + ] +) +test( + 'check version info in zck_read_header', + zck_read_header, + args: [ + '-V' + ] +) +test( + 'check version info in zck_delta_size', + zck_delta_size, + args: [ + '-V' + ] +) + +test( + 'check opening file with optional flags', + optelems, + args: [ + join_paths(file_path, 'empty.optelems.zck') + ] +) + +test( + 'checksum with non-hex character', + invalid_input_checksum, + args: [ + join_paths(file_path, 'empty.optelems.zck') + ] +) + +test( + 'read single chunk', + read_single_chunk, + args: [ + join_paths(file_path, 'LICENSE.dict.fodt.zck') + ] +) + +test( + 'read single compressed chunk', + read_single_comp_chunk, + args: [ + join_paths(file_path, 'LICENSE.dict.fodt.zck') + ] +) + +test( + 'check verbosity in unzck', + unzck, + args: [ + '-vvvvv', + 'empty.zck' + ], + is_parallel: false +) +test( + 'check verbosity in zck', + zck, + args: [ + '-vvvvv', + 'empty' + ], + is_parallel: false +) +test( + 'check verbosity in zckdl', + zckdl, + args: [ + '-vvvvv', + 'file:///empty' + ], + should_fail: true +) +test( + 'check verbosity in zck_read_header', + zck_read_header, + args: [ + '-vvvvvfc', + 'empty.zck' + ] +) +test( + 'check verbosity in zck_delta_size', + zck_delta_size, + args: [ + '-vvvvv', + 'empty.zck', + 'empty.zck' + ] +) +test( + 'copy chunks from source', + copy_chunks, + args: [ + join_paths(file_path, 'LICENSE.header.new.nodict.fodt.zck'), + join_paths(file_path, 'LICENSE.nodict.fodt.zck') + ] +) +test( + 'decompress auto-chunked file - nocomp', + shacheck, + args: [ + unzck, + 'LICENSE.nocomp.fodt', + '394ed6c2fc4ac47e5ee111a46f2a35b8010a56c7747748216f52105e868d5a3e', + join_paths(file_path, 'LICENSE.nocomp.fodt.zck') + ] +) +test( + 'decompress auto-chunked file - no dict', + shacheck, + args: [ + unzck, + 'LICENSE.nodict.fodt', + '394ed6c2fc4ac47e5ee111a46f2a35b8010a56c7747748216f52105e868d5a3e', + join_paths(file_path, 'LICENSE.nodict.fodt.zck') + ] +) +test( + 'decompress auto-chunked file - dict', + shacheck, + args: [ + unzck, + 'LICENSE.dict.fodt', + '394ed6c2fc4ac47e5ee111a46f2a35b8010a56c7747748216f52105e868d5a3e', + join_paths(file_path, 'LICENSE.dict.fodt.zck') + ] +) +test( + 'decompress manual file - no dict', + shacheck, + args: [ + unzck, + 'LICENSE.manual.nodict.fodt', + '394ed6c2fc4ac47e5ee111a46f2a35b8010a56c7747748216f52105e868d5a3e', + join_paths(file_path, 'LICENSE.manual.nodict.fodt.zck') + ] +) +test( + 'decompress manual file - dict', + shacheck, + args: [ + unzck, + 'LICENSE.manual.dict.fodt', + '394ed6c2fc4ac47e5ee111a46f2a35b8010a56c7747748216f52105e868d5a3e', + join_paths(file_path, 'LICENSE.manual.dict.fodt.zck') + ] +) +test( + 'decompress dict from auto-chunked file', + shacheck, + args: [ + unzck, + 'LICENSE.dict.fodt.zdict', + 'b20064d89c3beb8605d99c994ff45304f308abd840c0981475dd2faca6ec854b', + '--dict', + join_paths(file_path, 'LICENSE.dict.fodt.zck') + ] +) + +if build_machine.endian() != 'big' + check_sha = '45e48c11fea129d2c434ffcec7d8fbc1720f30f33d438654cd117616121c218e' + if zstd_dep.found() and zstd_dep.version().version_compare('<=1.3.5') + check_sha = '45e48c11fea129d2c434ffcec7d8fbc1720f30f33d438654cd117616121c218e' + endif + if zstd_dep.found() and zstd_dep.version().version_compare('<=1.3.4') + check_sha = '1749c2551ef26f26a2c61919dac7a4c8801154cdfc0524ef21187cf0c263f8fe' + endif + + test( + 'compress auto-chunked file - no dict', + shacheck, + args: [ + zck, + 'LICENSE.nodict.fodt.zck', + check_sha, + '-o', 'LICENSE.nodict.fodt.zck', + join_paths(file_path, 'LICENSE.fodt') + ] + ) + + check_sha = 'b4805798547be62421944a87db3a90de455b4772c6013e685720b49336b8b17e' + if zstd_dep.found() and zstd_dep.version().version_compare('<=1.3.4') + check_sha = '0fb0f2262c62714063e409117fcbd4c114b35e3abbfc90b042a41246b62ff789' + endif + test( + 'compress auto-chunked file - dict', + shacheck, + args: [ + zck, + 'LICENSE.dict.fodt.zck', + check_sha, + '-D', join_paths(file_path, 'LICENSE.dict'), + '-o', 'LICENSE.dict.fodt.zck', + join_paths(file_path, 'LICENSE.fodt') + ] + ) +endif + +check_sha = '9472ddc74dbd96291077bbb8d793e605824be8dba45e3e94bbc54b7de21a37a1' +if zstd_dep.found() and zstd_dep.version().version_compare('<=1.3.5') + check_sha = '6911b50cad5b6ed3ee89322338c559afdd0e72f614d3817b47ce370df52fd6b4' +endif +if zstd_dep.found() and zstd_dep.version().version_compare('<=1.3.4') + check_sha = 'ded0d04884b13ba23d00f9b11b2b5950f8b9670d742f67d4195707ed85e73048' +endif +if zstd_dep.found() and zstd_dep.version().version_compare('<=1.3.3') + check_sha = '437a0ec28def0c7f361402f6bb337cb963e6a3682bc742dd9e56171f6ece9881' +endif +test( + 'compress manual file - no dict', + shacheck, + args: [ + zck, + 'LICENSE.manual.nodict.fodt.zck', + check_sha, + '-m', + '-s', ' + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions are met: + * + * 1. Redistributions of source code must retain the above copyright notice, + * this list of conditions and the following disclaimer. + * + * 2. Redistributions in binary form must reproduce the above copyright notice, + * this list of conditions and the following disclaimer in the documentation + * and/or other materials provided with the distribution. + * + * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" + * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE + * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE + * ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE + * LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR + * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF + * SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS + * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN + * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) + * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE + * POSSIBILITY OF SUCH DAMAGE. + */ + +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include "zck_private.h" +#include "util.h" + +int main (int argc, char *argv[]) { + zck_set_log_level(ZCK_LOG_DEBUG); + char data[1000] = {0}; + + /* Open zchunk file and verify that zck->has_optional_elems is set */ + int in = open(argv[1], O_RDONLY); + if(in < 0) { + perror("Unable to open empty.optelems.zck for reading"); + exit(1); + } + + zckCtx *zck = zck_create(); + if(zck == NULL) + exit(1); + if(!zck_init_read(zck, in)) { + printf("%s", zck_get_error(zck)); + exit(1); + } + if(!zck->has_optional_elems) { + printf("zck->has_optional_elems should be set, but isn't"); + exit(1); + } + memset(data, 0, 1000); + ssize_t len = zck_read(zck, data, 1000); + if(len > 0) { + printf("%li bytes read, but file should be empty\n", (long)len); + exit(1); + } + if(!zck_close(zck)) + exit(1); + + zck_free(&zck); + return 0; +} diff --git a/test/read_single_chunk.c b/test/read_single_chunk.c new file mode 100644 index 0000000..3e83971 --- /dev/null +++ b/test/read_single_chunk.c @@ -0,0 +1,113 @@ +/* + * Copyright 2018 Jonathan Dieter + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions are met: + * + * 1. Redistributions of source code must retain the above copyright notice, + * this list of conditions and the following disclaimer. + * + * 2. Redistributions in binary form must reproduce the above copyright notice, + * this list of conditions and the following disclaimer in the documentation + * and/or other materials provided with the distribution. + * + * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" + * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE + * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE + * ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE + * LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR + * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF + * SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS + * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN + * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) + * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE + * POSSIBILITY OF SUCH DAMAGE. + */ + +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include "zck_private.h" +#include "util.h" + +char *echecksum = + "31367eeea6aa48903f2b167149c468d85c4a5e0262b8b52a605e12abb174a18b"; + +int main (int argc, char *argv[]) { + /* Open zchunk file and verify second checksum */ + int in = open(argv[1], O_RDONLY); + if(in < 0) { + perror("Unable to open LICENSE.dict.fodt.zck for reading"); + exit(1); + } + + zckCtx *zck = zck_create(); + if(zck == NULL) + exit(1); + if(!zck_init_read(zck, in)) { + printf("%s", zck_get_error(zck)); + zck_free(&zck); + exit(1); + } + zckChunk *chunk = zck_get_first_chunk(zck); + if(chunk == NULL) { + printf("%s", zck_get_error(zck)); + zck_free(&zck); + exit(1); + } + chunk = zck_get_next_chunk(chunk); + if(chunk == NULL) { + printf("%s", zck_get_error(zck)); + zck_free(&zck); + exit(1); + } + zckChunk *chunk1 = zck_get_chunk(zck, 1); + if(chunk == NULL) { + printf("%s", zck_get_error(zck)); + zck_free(&zck); + exit(1); + } + if(chunk != chunk1) { + printf("Chunk first->next != chunk 1\n"); + zck_free(&zck); + exit(1); + } + ssize_t chunk_size = zck_get_chunk_size(chunk); + if(chunk_size < 0) { + printf("%s", zck_get_error(zck)); + zck_free(&zck); + exit(1); + } + char *data = calloc(chunk_size, 1); + ssize_t read_size = zck_get_chunk_data(chunk, data, chunk_size); + if(read_size != chunk_size) { + if(read_size < 0) + printf("%s", zck_get_error(zck)); + else + printf("chunk size didn't match expected size: %li != %li\n", + read_size, chunk_size); + free(data); + zck_free(&zck); + exit(1); + } + char *cksum = get_hash(data, chunk_size, ZCK_HASH_SHA256); + printf("Calculated checksum: (SHA-256)%s\n", cksum); + printf("Expected checksum: (SHA-256)%s\n", echecksum); + if(memcmp(cksum, echecksum, strlen(echecksum)) != 0) { + free(data); + free(cksum); + zck_free(&zck); + printf("Checksums don't match!\n"); + exit(1); + } + free(data); + free(cksum); + zck_free(&zck); +} diff --git a/test/read_single_comp_chunk.c b/test/read_single_comp_chunk.c new file mode 100644 index 0000000..82c94ed --- /dev/null +++ b/test/read_single_comp_chunk.c @@ -0,0 +1,102 @@ +/* + * Copyright 2018 Jonathan Dieter + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions are met: + * + * 1. Redistributions of source code must retain the above copyright notice, + * this list of conditions and the following disclaimer. + * + * 2. Redistributions in binary form must reproduce the above copyright notice, + * this list of conditions and the following disclaimer in the documentation + * and/or other materials provided with the distribution. + * + * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" + * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE + * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE + * ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE + * LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR + * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF + * SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS + * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN + * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) + * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE + * POSSIBILITY OF SUCH DAMAGE. + */ + +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include "zck_private.h" +#include "util.h" + +char *echecksum = + "0a1a0a63193752ceb4fcf6b5340011d7083f224fd0da1dd91563e0331129786a"; + +int main (int argc, char *argv[]) { + /* Open zchunk file and verify second checksum */ + int in = open(argv[1], O_RDONLY); + if(in < 0) { + perror("Unable to open LICENSE.dict.fodt.zck for reading"); + exit(1); + } + + zckCtx *zck = zck_create(); + if(zck == NULL) + exit(1); + if(!zck_init_read(zck, in)) { + printf("%s", zck_get_error(zck)); + zck_free(&zck); + exit(1); + } + zckChunk *chunk = zck_get_first_chunk(zck); + if(chunk == NULL) { + printf("%s", zck_get_error(zck)); + zck_free(&zck); + exit(1); + } + chunk = zck_get_next_chunk(chunk); + if(chunk == NULL) { + printf("%s", zck_get_error(zck)); + zck_free(&zck); + exit(1); + } + ssize_t chunk_size = zck_get_chunk_comp_size(chunk); + if(chunk_size < 0) { + printf("%s", zck_get_error(zck)); + zck_free(&zck); + exit(1); + } + char *data = calloc(chunk_size, 1); + ssize_t read_size = zck_get_chunk_comp_data(chunk, data, chunk_size); + if(read_size != chunk_size) { + if(read_size < 0) + printf("%s", zck_get_error(zck)); + else + printf("chunk size didn't match expected size: %li != %li\n", + read_size, chunk_size); + free(data); + zck_free(&zck); + exit(1); + } + char *cksum = get_hash(data, chunk_size, ZCK_HASH_SHA256); + printf("Calculated checksum: (SHA-256)%s\n", cksum); + printf("Expected checksum: (SHA-256)%s\n", echecksum); + if(memcmp(cksum, echecksum, strlen(echecksum)) != 0) { + free(data); + free(cksum); + zck_free(&zck); + printf("Checksums don't match!\n"); + exit(1); + } + free(data); + free(cksum); + zck_free(&zck); +} diff --git a/test/shacheck.c b/test/shacheck.c new file mode 100644 index 0000000..5b098d4 --- /dev/null +++ b/test/shacheck.c @@ -0,0 +1,114 @@ +/* + * Copyright 2018 Jonathan Dieter + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions are met: + * + * 1. Redistributions of source code must retain the above copyright notice, + * this list of conditions and the following disclaimer. + * + * 2. Redistributions in binary form must reproduce the above copyright notice, + * this list of conditions and the following disclaimer in the documentation + * and/or other materials provided with the distribution. + * + * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" + * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE + * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE + * ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE + * LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR + * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF + * SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS + * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN + * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) + * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE + * POSSIBILITY OF SUCH DAMAGE. + */ + +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include "zck_private.h" +#include "util.h" + +char *untaint(const char *input) { + char *output = zmalloc(strlen(input)+1); + int i=0; + for(i=0; i [args]\n", + argv[0]); + exit(1); + } + + char *cmd = untaint(argv[1]); + char *outf = argv[2]; + char *echecksum = argv[3]; + + char **args = calloc(argc-2, sizeof(void*)); + + args[0] = cmd; + for(int i=1; i

jU^(^Zlx6wZk0f56q?d9=}| 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 So0L%c@7UyC_Br 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%0A33_l`AboTny_9RnnG!Eiybk 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 z zdJ;E%8&n`pbyqxIfea)?@P4$+QSNexM^5$EbZ&e=3L7j1m6yikfu@K-PF#k12i>xue|F{0+8#-=pZ_E$ zN^Z=1*O`;>MhZD2e6=nWT6Yun0XUTy}Doy;VXbydojN;9D5t2k{dgu4N)@$NH$KIbwZ39!6%9?ZDd zCQjY-eyA-lK1T`k;+BEwD|r@FSQv_z_`c`;D#nYo!ePDlUpBg*G^?Ac^2}xFCQZ>3 z?%kkpvI~U_m%M0|!H;C`&flXcoU)E%X}yq^n7i>nq%O&nXhZTT1G-8HPM!}hZSjDt2&__I;E(-r63H!(5hc*na=KbPcs zP-gSuV`wEvB%IAmjQep$;iv;SiWZnIx0SwrOM5^{|MA;OGW&OfI3v$wM9DBoCwCf) zTG-<+D(NIocRVg)m`izbPlAH zdc&q1E1c-gs=F)u%0+aPS|_I*At?spg^-GmOR3RkR8_UHw^AeSc8puRDhG9T$ep9C z%M}U1Un^o^Sj@0_+fp+dBT2yOo3)}O_mJu(C|)qI`gOMR)sZ5{P>=XPN7b-!GTX& zRF@jHJNQoO*QY#|6?%`_t~{dt{G#1BO;N*Mmwte_A7c*5do_;qdSgzP+y0Grl#-YH zqsqq8*a^7%?tjwY?uvHs4`y}9QQrE*_e~eEHB2Dx*a^(MaQ61;v`aBzXyR zD~hv2(jH@d+}BKqr%g0I611N%7P60C)#8Z1?PNffuJGVCiW==g}Lp zk}P|CPA6w`cT1j+iyAzeVteg22CuAosq4Kf;vDm86-9SY;0^GjZWyhr))So z&lnv^KNaQUQpu05(dn$#=TuNM5Wwk~*ok(T$*l5(Dtr|6SvTTx^}J)4uj0k;i$Z8u z+Vb>BdTxd1swXAIHyNM2N{R+kF3!9W(8u5N#!`3X`MX9IN?F?FD&x=qrIyVqOQNSI z$=3&hDT0VoKCw1o2XiUFvSuq3G@klRG50qGzIeumC0vH`C=i(4D!^g9o7I0)?*&u6 z%M0s*_JKv{jH)_b*66Ue>l5RA(HjFdmG}2rh8O7QN#w6t%wjN@sSOt>)0UY$&)uI4 z!*!|5c{)Jksof=xX2$P)gQ}Uq&3%#+PZ~x+hki{pF$XU)OLKD02Aq6{WZ|^tsKs02 zc9KW%wp-oS_noqav7zx;PRZSJR{gquO6K+L^Y>7#)|K&!lE!n4Ws^4Pa^4op3SF0# zMo|`czgH>~kc?7xJ9W&Yj8G8MEzqt02Cy`G@n)Btho*!Q=sK0;9BF{Zw{;EiEB1g{50+(gn$Ej&NPUfAvZ;utpAh(b2nz&ClHCafA2I`TT3HKX2O^T9P& zj=rbUX``0>F9m#T(yuU}S?Cr8ONN*8k7wcXdg>BpUFzvJkSsH#!L`~8sh7X+mg_rI z5n~ODSC?Y^_}orRNhlvJgbxVsOBmY9<*L2g*fthCL8O;pN`P6HbM9vI`1uy^Hhw7;^8yH??4Y$DxUIg>y7*+}Cp{~9Z^E01wa>~5#ZMfA zVi?%G1o=W4-8qFW2a#Q0G1>O%q!MR!V0&^NH47~S*ZlHMgwvJ%kv8&LnXXcBDSHBG z3QdM*&+UfW@}Eq&9`9OOb-J}QTf~OA+suIQsd6(}ZkYIexYGw2(3;*A50eg25G0p> zVy;mzhNhOYYmG)-oyo^(a{W&f_6d7R&fm~?dw!wZ*?b^ay8!)y0oT~ z2v~45IB%i`f?ot~D5}|=Z@e{&>alww-bHilg3VMu5ROV?fFSBqydKZB+gG=(j$dZ4 zu{~UqY*|xKzm%(G;AG)f06iD}I&bp%_-hS$4Ewwmu0?f>&`5FjBAZE;hu5}>i0a^r zu|>UhL8n<}jilVpo^6WWN++xUIf|gSEciVapv+@@SIh9ROSE(Rx)jcPmwLDUartYv zQ#;O=16{hE0Iu)(?mXIMpmr(4d>gX*_-VjmK^JfDEG}AOBcY@Z}z^HFZ zwF~<(SQ*{)*i}x`m|TWFSW{VG1bp945pZ7R-xhcBvhLYtx;Lu$-pi?OHFO}Lh&|kv zMy0Xbaj1I%90V1e*$^(VmI!BjSA5|@%#h+beOT-};;S~-X-ULxD5ED_)E@P5NY~lE zgCcJVDK#Xor%*0(ZMdO79ahQl4ed=wa|Z}*wr9j%&*rRQedZLvyzBjcw&z> z_js4=QOlQWU)H%AOwD@->4>FSzOZ5@nfqQ)<+T>6f846R!l=`mqxX!{_lMwNp%1cD_hDQVhG|BzSw{ zKVwH#oFv=Cdu(yJ-~D+Y*CzwsYf>FVo_NWH1K#bLx{8CUcJgdY82&K^XGs~T+MsS@ z=6yYySxc->c$;O6DVv3n zegBD8|HY9Ug-4rvOV#{Lo&4?d+}N@oBU9t{bDI1qCLgzjabA2st#4XDT}Z9i;x5xVUWOt z!C;5e9$#P{6==bPQ3jwdM|_y*PflMtfx)E^(1azQDBwrsvF)*0I!iOR zFizQD8v0=QTok}}VcO#2*wSB%qsF8ZaIuk`ih59y(PfkvSLhm|9DhD%v2AnrT%(8C zdAAflPC6SKlvlC74D;v-IXI$$j0L`*LrYM53LAFN1ox!&p`?I0R<ZG@i zGY3@fcyV~7W9&Kxc~a-_CzdE{cCcR7w{Mr$W^AJ_%73ySP$7fY|}(X zB-+!|A=3E%$(7#Ogs&2u1sV(xtO2M(i92MeJ14i!V4_|n6spd0mKQfrx8m$R^F&C7 zr0edWhsE~ZDYFOV{B_EYQgQgIU)^WSQrwc3d((1iI^qPGAN{)kUVARd=4h@#K`<#` ze2`{WNc)|r-7yC;o+O|pSG4@~G|T$iV&Mt$OAF?20kA+nC>G?@N_$u;dnr4N;Xw)* z8Dj(Ya!+xvR;A7{+EeFXS{d1iR9^AF#`RMFx=FrSZ+JR|^pO@;cC80m(0$e7QS()< zK}m!b|4p$-22jy}+#Wj0fN;l%4}3J%>O71&A1Hv8Q|=y1p2Lqpq+o~)HOi_I#bu&Y z%mLq%Z{=IH>m~!FU2V1m#kRcH28eMPm|bknP8Ew7s#}S7+Y;9yUg9afC*mbeJ3kok z5H_Aljnh)5h!vP8fzLq^$ekKH%Q6MD`K*xnXQU4&%FhXO(1;SS#3av0u*3i5fLX6UM#Z#aa zP3}e-sh+XCkBQP_bg${C(<$g;y`M13#K>lY@08}Sud;Z*cFz}0k*>@ zxsZ$`6bfiV2cMpVL)%F}E;iQ1=lNt4qlM89+YO5pFt8>^Ko%d4gLBn4-70TI?TJC~ zGtn7~t{0m~{W98}GY^PJ?#{34M7#94H9uRA zrP>ID0JpBQ@LjA+vplTkRku)8fr9l|7&p$wyS(Dq7)ykFO>e7?O!)mCj zyg}Vy$W@&{?O+V|2&p3C< z@(%yag!^&eq3+mD5C;7xx)UeAgu6z@cWMlZluxwtGM5e+yt$jjkM+fa7a};rCGAXP z;Nie?_Ljv`($fp=b7Mox`ZL{Hsnu4T)~m)U4XpzCH)n83jIET5I-V#K=Sz5cpM0L{ z@X6|AkGFSnf1mKl)y)rZ-sN>|K?<~~T*7A_ibq7}Sb1dpEF|zs*T0lvp_)$WZAGq5J15z$geWv%-7X*Wp-DY& z_{ejfZ`Z^=`!n4OTLxqMU6qwjK*S;~0p1-)nRnqVVLAwv2Fs`e~j3ZEN8L`7?g?Vcj4%KOg(Ipd$D0llC{MER4Gv7)LTd~MRc-Mz>EMa&eqthS?6OHDu3jNzFD=RkN{+M3isSZxB%>QEN z^&*W(vQ}rEk0MpWzNIgch*dp9sHiOx5;RiS(uPlh13(F~0dOP=(54}WW==mV#=r&* zF$VxR0Du929)N;T7=eR7$>#V0AlI~8cR^;Z_b#wr-wz`O2rg!qTcBY2gC!WXOFR3{ zF*e_aP!J03@kp(p3BNgKBunqDm6n?o(^3e|eBFYG>4>q5ARk76oU!(me7eVnu-Uua znRRn!@aoiN;y${ID;$($dwSj$&HK8hJITWHr}=$nvbOL9F7@o9P$=Ns{9KMMZOJMY z409j7C`hz|rgdTTVc)9(ahCFM9n#D3vA_b9lp=YYX|(-xpp>1)fqRY~dardiPPG@G47 zlWA%UQu4Roa+b%5Qr%mUTmPg=cY*rd!YX?YtmV=Kim3QxR0KKI<_ z+5pH#Zd*bsI!+J(KaCAhdqo>6`)s4T0QG?|t$J@;S@wCXdr)CmGV2T$j1!_nWVaGW z8d!yLeXbLgc_7SoitOCBD<12TtPf0(zQy`W1-W+d9x3ff0@mJ`mB|3dGvaLy?K1ZS z)4EP`3wJYavq)(6OSt;Yk z1cQ?fIIC>U1ySa54Jhg4ZP=9pbv!X%-;Ye)Fzd7<*db#AZpi%~W{kEP$p*%jT~@_l?eFdSZtQ`)?b zOG&W+X2_N$vU5B2c(W_Y{F6EX!L{cKq0AXwdvl!{g*EGmus)?K_2Ox*`u16QOyl*W zp0$fN9w(|_QVOL@bh^A>GW9~|Y5$qj_aIT#G)HG}Fnca(&qJ3D6hV8_8yED^1o86P zjjQDwed!$+|*( zVGa8R5M~oJLnD5(Cmx>5StRtBpy{j*mAxuSn*1hci(4_Q*><+SO?!-4MRjhX%RXAF zAyMXX4d=~}XI|u;kh%Ij(!zOt12}B&{ABliqqY2;mjVKVg%_-YjnpuhMc4*WVxEi9 zf6)U=KWwCZ5!NueT7t=u9erkFw4-mNV*_)qVv+ZHVfJmn1>LO7-QUXRQ<-uvvQ?JHf(};mX#7EG)%pL zM7vEjWp+=_kv+uAhRnaSU%tW7ezP`+sIF{uhhHJpJc}0;>J_Kwv3zESpp|qAUw|Q1 z;AZVB8>}UVLeCjJEMMMg7?+T;N)VA&LCy1?<g(JGMV9MDm40gkRsCwXi~n6vda=RfyD?kIz{M24TCVPPfify#(LkO_EaA5s|-& zfl6k9S9oJJo8-YJi_MA4a!L_Kv6{@gb^I@=Azk{W=sA}6#C(`JBcY|q`sQa(D zDho8dxg*JaA?sl z@jT5Mrlb_16Qh7_J{^>I+5xR<)+1L?=aJz(C;p}wQw`N@Gb>`J4^JDg)uO~Is2)mu z%67&8aza8+pGfn|HCsKw#`P{q)!h`2$y^H(>%;y<`j!-GLx4$(RKug>Tdz0NIP`*~ z_F(pS{vjCs#urY%eAs-h0}tCw_Lf}*`eBpDeB#?o$>F@a#~%!oRC$igl28Fo#4HI) zORK^26!fON1x2v#g@@C&y=SfhGp$WP?%g-t9BtZ=Vk4n5?%1hJtKql?3mv}ZlA}RQ zx#ST>9C@>~4)DP_ziy3WjXcEP8n_wLuc2bUkXy$U6jQud*--QW))O3{rV&l29cjc~ z*8n}Wz2Tk-8vSG|x=!d%gb&zQQn&KJS2T>za+rx$Ns!}8II`7~3K^a#=FFEPND1uA z$wWsfbps!^nW%s~DlpSUODAPp3{i|N$?}j-6pR+#HxX+g=hi*H+SvX`wKWYTK)I+z z__`%Mbz&gin;=i8KC;bVaRY2r$WS}4h*K|sef$FINm)LGa)+kFLjw?qzwGvD;biRGS(lC(^HdzHuaRJ76U%D_-fl-1P-6 zq+ zA{*;j9go>4-f43lHig`1YmXPHAaedXGhSlmCxtCTa?h(-^Y}cJmQDCS$;WGoh}Q}- z)5`gvz!^POEky?NneLG_TW9%|@qxDY9BfTzoWZyVL+_A#XBaekSzY0#mYBdo_x+)f ze=IW0zfk!*k*Siu7g>{(@h1(I7egYb4JFQlBI}FZ<&MBe z_k1t8&ifg4wPV*3fe-yc)|@L?24Q8e#1Q1&i!`n!bYm$4V%Z~+p=fF=*RbU=1d3hw zhdwTKzrjAIB}(@A3V~I!dfc*FIJzb+Fp73=C+*aOl$ho>5)+=S z5(5t7PvDJK;zaax)mh2sh5=XnYx%fV1wnsFWQ36kl@M<6dy!?{fGY)wi^ponFEa8sP(WzM%0H;hPe zCsvt)(1Fu3WReAF=ak(p6PRo+E{I@NydUs-&Ai8gca-8}OND+aT_EzY76u(Pyofd} zNZ!~@d?fJ%t)MD+&$~NG{+*s2Dt0I2D7)oBz$zB7Ufh~#j6JVqVUd`!k{WDl!?RoC zu0)h_6Ym@p)eAL4tGlblr;`T^Shg+`Sd+^ua9&xQ=D!&KkvtbGRlwmPhjukh48y0h zDQkkcStmc*7C))M_zMQ61gud3w{AKbcr-1IgO5UsP*hrTBOl66K_lL_&NwNpW?-=~ zNSUVp6_Z-k5NdFXOtN+K^$%$N4>zf46wJWU0UW)TdY;Ep4Z+4uZDrkLu8L%w>$MNo zmas~ndoQ1CPE1j=ksmzrN)w1dJys%1fL%18MTLc_f|a_j58j3{TZExh z)tmg~R;_=c=(2QE+ur4QwY~T0GNYHk9pu3?im|gK)=Q2RIuVc{??!=-7A++14IuQn z{x#=_HN5#LLwpu-7aRRXT~ABl1QO<{p*hTyggfSM5#L@M8&yZH6!eZM$4I+kVqke2 z5OP;kGS*;o;J3+4#}+R^?pvCsW8t%NO~pTzqIkr~N-HgiK?z)q9(qIKhxJ@AR_&wB z&Ha?J-+hMx%`)AFajj}znKUtuXRX>oxZ5;~kNRtg@ zg04mJZk{$M2B9>8-uqs7+a7ZA^(Dv($9@>wzQ$fAs`)UAt=GJC&IsG}?m?C!S?2LxWFDawbtN^w9}3VS31MPH|E0Xb`HIEDnt zs}pWBBpXSTK;(g*m$0r0#>$7<-YkkY`rXL)=U()fp6k{`UTeS8)2rnV^@L1rJ$n+3 zq2Kor7Y2a;IX#cR=h>U0Ts4yBp;R#hdhN3>*j&+6MS)pRqa9Xjd?cj2+z5ou9s-J0 zF4y79<&GD=yB?6OtA6;NzlNv)B1E%e@t-`Zd6u}un=etFkdR#~<`snR9)HunBSwFicFCSPfBJ*83v_`3f62RD z$DZ`k(UW$3ds6oApA?b2i3v$pDwyC0PfB3`iw|w0(H$dmK|Cqh;gjAucv5w-po1s< zyJPe~PbqYd>4)E!m*?Sss3)|3y|jpos4VRrsub=&sORzb{5xXwK+ivPUB8cb-#qtt z89n}-z<*gryAI1J)<0QBTLJN}Wt5e??;z=ZK_p%0gEGqLzow;?0YCR8mU4T|A0_gJ z7X1P_akv}xBgCRcaCZtdzSu@-F&R-~#yeD~5L0-Xe`~V;iG7VEjm1E|?X}W7REP*Y zu@%p5Rv2T2qk9mc?p}xp?a46j;bBv!H-Ckngo5p`bY1|0#bgMj9!|Leof-78KBZXr z!dF%gV!czFaS`PTGYz6$x`+n=Ql}L1^Z|$ak6dHe#n*2+pZ|<;@&!Dmf}M6jA(9V1 z4kE|%{V0e1`NV+_*-jzbDP%i^Y^RXz z6tbN{wo||UghjSfe>#;wwo~741gr8R+bLu_g>0vg?G&<|Lbg-Lb_&@}eFfY6%qIb4 zJN3JEN&wkTA=@crJB4hgknI$*okF%#$aV_ZPW?9@`%eGbPQk{RQ2@eDGRlB^m{$wy zZg-_8EE1emK#>Jm${COhYeGoD>4r?5!r12wLe_LG9D7wK0-FGGk2lX!ZpNF&OojR5 zHYOqdMkcvOFSp%TO>&{)^#Ey%^0eWNj5mclt%jnf7#r%(;sBzSJ1y41>>sI~x8_Lq zHQU}Ocovi-3w&Bw>?cJDI$9ovjftZG4Cv$tVQ?Zwl|~e}7~h`}<0cxb!S>2dASFFn zh8tnP)+rn>L$sOgn_@6g<#3W4h+Ika%%@{|-QfI?FWM59R2hxX)56J6fuXJJshApf zg4~-jgAs%@w|!d;w>ep_Ud+M;L@YO2DzjCA9zF5dOG5k+!iNjOLc%C6{x??~q+x7F zYiQ$YC;)FKITbvTDy?=2^w=PkM2XCnO692u zH$$0MfYk%b(QA|0*FQBbPjZ(@+p$q}Jt-Crqe;JM-RE;1j?0^~ZQq}}ATK%3+CT0r zytr@`vHW{rARf4kMy=m}lIS_YLP6*hlrEh(_mgd!UnFOUuuHwa$4W^t}|zDhA$i1#JWk_wl`zPY{Aa`0xm^_pKjD2Q_N$b(*0H@Gx) zcGCxJuY1^Hfu)5(hl_&;9%RvZ;6b=y<}D|#VRhL|w?n%MFSUKXxUiVrDGow7YX=V) zExYSOs6t7#a${+FEoqu8f$Tj4PNL!Hgl&3B^r>!!A=x2Tw3ob5sirEC(YJ7knXTHB zYnLM9-uc3(;+DI(c35!$k=D<&M9B@8IzGDC;k$o!;G+KE>IR+O6MH!pB&Bh<_XHc4 zM*-Xr?}d;j!fuRyLL18bp-FWkIgQBf^XU=kxXXy}Vmp+l@I#2iH+f*MHQEL_^?HLh zEav>W2AaLAG&VFgBBk%eFvykHw5e$k$YU5*=5t=2nH8ZL{bYH04Z25kWFa2uvF)qx zUJb%te;6|rnx37*Z`$>FP>mXxeYjW$`;h~+pb|53XMgZtd3EGKr2r3*ei-%FEF2$N z88eO0v^H*_Jgxua_$ka4r$we)>bL{F{vSIKBE+=NDX5Md`d0^H7Qj@1OTF5E(F!^g z=oeuQJP6z-b?8B7fAJuWWNa(@r_`-6ssp^Q5mAqxK6pjIcE~+9YYoqK`Ci7xx&r7Y zU1-JeFvKWa?%@(#sxiT0abOVtuxJJO^ZnN{Py_b zg(hMC%8;vLZt!;DIy1KrUIy)C%Iki@7!yNQZ=NOAMGUnJS~2lmtGAZiF|h?BR{qaS zHpPMQj<#Y&5!ndwZg*^7;DzJzgb!@CfaqAmfwIdr)u3KeVb?umB&RKHCkb4D zr&t)BDu`?CxT(kI!i|ZZuMfnX3IQ%U4c$#spMPy!Mas5tZ+;eUBY_gg`x*3_yj2%9 zHdodpu_;zY3GvfZt=xznsn>)3kRZLIALsBkfCL?w={wXkZm6o7;hf($P07^xz3wC` z7{FN7qJPWR9PC$L!v zTjf2#V2yz%*I8ttdfRQC%Md4deTsJteV2(6$p0z)S^~X0cfD^d_=l+SMgV~WYKdW? zcDd(BZa(ax9UoJgmip=n2=t;nqVr5OTNbUL>q3Tfixl>33hySn%BcWIPC$60z+!vr z(>l{u`qxw3^JYDgPncBiHl?4t^3L8`I6;7!Zn%x?tyEQ*(l=-USC6lG7X?$l%Nuvj zGH5vI9pVueo+}v_5D)`!REu=Z1{wln5H93Fsuq1-$LTBLNy0BD4uulP`WXn@*Jnk5 z5+#24tUp%ujC30=+fCX}F2_|Z1Jizac8d&8f8i1c7v+CN)#I=F!j7AOn(w4ym(X@DOVai*O5FB@|5)Gh-!BQt72nWWBh}CXC2v)NyOtytb z)^kK(l>S<<{>N8kMg*%WE6t$;yLlcu@Z_NbQ}JucEwLr;*O);UGG>0!HLV%;i>_o+ zO>8jxJucl#I*SAX>?8;{t=Ux1B}4V@VnRl(c0+qtjQeFE3u zFj~=a+m1ymCDp^d@3cp&&ilIcoqRSJ^rvihO+%P;cASr zEcG>9satZSqGk@mwG7CEH_1+2-K!7zQla^ z0G61MS+E_=Yewz{4TlJA)RF3k%0}u&oxh(Z(J!!hml7P(EXCFU3HO-CpcaWPXy<1a z{E8u_%Njg`Q1zb=*Il&Aiz<@aW{AvmOx076U&0j<6ZF5L>hV|oTf+6W<8KSjyRdQe*ipESYU2M|a5Sj@TD^$?gAc;B96V(HYq*9rNqws~sQ5Iuqj)lV z9zQ|=ru+SSyXX#Z#DAr>{)ccK1Jn@Vip_e|MJOHbBFNO=I5TqMRJfj9z{i%?B7T%y z?d=*#6Os_osJp1v_PiN^2%nL9vSU`fQ8>(KufuLX-PhQd^06u-QI}caR#df4&=XVk z%&IH?S@+gGrp~)RPn6|`gN9gN`w~RpdU3vHwxksPJW6r_4Y$M9;1VkS2^BlyUv=d? z()A51=o_jn?Wa&}3SrnSAJ)b&g{E7(qb8nd>41@IPTg_`4CvNR|L3O8}B3;O}Ka_`72i$rA8?izVPE`l;i@gvhxS zVnT-;4KQ*HJ+rt$(xBCC(+zQEViDb9@L)J$myXD_I zpZmLi6C>wV$hj4AZiSp%{fHzQ$!_`gvs?be-0C>J<@19trHNPB4mWe`(v#V`%M$KJ zeIW~itmuc#+?!9(-M=9eA;e7{Y3@6tryo6`%ZB@Sy+7)tyg`cxi3YU~<@Rkm$sxa+ zXhkikB{%ZDO&beM9Tg^g49r#1;S<{J`k6)gaRR<2ldhI!%n=a~S@4{B0a?!bO>g1U zC^3u_!gUXxSa_q2od6^}&&9w5WA0UrQde;7kcCOz4gc|&>1Y1M31>gBf+&IeKeKo> zZ`0+1&80n|f{NSGt*q&If;p-X+X{DC3}%-?bjZGpT)aXqULEY1As4TZi&x0SE9BzU zk9W+F1FU1G(GhG-f4=>ST)cAk_#I&r&v63GE`SCdSVOF)!EImMuk>B%W1LdGab8@d z31hEJFXFvZl2r1vIy9%bSrL2o8sb`sTGdRG%2e?N!wl9rE~#cXTdYcqzif&>`~GmA z#t_(c^J8hrwRt(c6kjD0+d@b;zs|v(;~RX1i+*`Af~rAi;k_zZC9Aq7%1cJ-vak7r z$|_H8LSeCBi$$FKw>aWl5T~QkMhbTjgzI1g;d+d(%)y10qJvfog~|yoY@?eYmf~c8 zp+%XWy!X4iC4ag|`iru^Uz;sIbG|K>Vax1b8Tv@s!yWga_+R(%T3v`y30j@p1)fF$0q!?6W#vnPW07)Ah-rc0|>Db zEd~=&C$SVsx#8cfoSm_snqY?5viuv>{TjC}?T(61=iU~;D2&fvLVq1h=gcGusmxQ{ z^A;yqpa%V_t>v%U%D!^ph92LaMgI=3LHRqp1`3qvXx)A2_`16k4;x$RBno2P9q0RX zcd~^NPiHD9@i$2U!hk={>i?)*ikZCsDR-3}Nu+<>?*Hf2y}N3LrZgrXdVRgR-?jfS=_%8Up*`u}h7ftF5 z)Iq=Ctay&OGB7Iyg=nt(7Y*kr#}#T86(SCse9?Q>>!z%iLY~0huZ5v?xyYkubN9+* z|HzfwkI$*#HU|I^5J*dr!i7VX<-Kb=iqi=Zqg@zn?A+d&s*VT|%!#}*3hr}BG z1{jRQ8Xiulkyt|{*6^pW?MSTQ|8rQwW2~BRB-Rjlkr;WA_#e8wjNI9Bb@~eg$YqC| z708RkM~C2%7m1M#a{5J0~P@!nQn+LY^Bfa^6_enc*hxWe7?PD0O~nEv?g%R%M21 z7_s`lQCf`C%VHR3&JksjkDKN#en~5`bFHS18xL|cEi0kP-Ew0UJA@T_G9nB8Y5M?GnifuZ@S?$v52g~Od z?kDb$UEkr`(kDeD;&ic*oQk5X%;>UDEVrA1dcsCpZV^p<^7g69-&Rh#6EZsO5_U36 zaf{wWb4fTdH2ho>iMG8)uBOi_mLW#+>hrZ#%qvXfz{UT}!c(x$y#^TR~=OC8%=ZLpdg={p#Jus{6-PB7p-;sm}5ZkrzdlNMPJhgH-=s zOWHUej>sfM#PNiYd&Q?YZdi$jRkFFI7{T>ap0G@Oy0`V9U|aQCb&83m6gX8d%7?cC zb~;~HWzGfY~7Sd{TOwFIqa%aOtdfg|}RBPmLiCl@v5cBeS?@kkdcM(7 z_f^pY&m*u}VhF6(e;-O!z}2IobUZoO?aGd!N%1@TN3-q^2SM_oxM$p`vyv;xnzcw` zKsUGao*DkdX z&!uu_;UY6RGaHm2TWZKln0{|FKJT@8uXfU{Q5kAae%kR{(b<_|4F(jnp+1=7w3)Y} zYoFSx*Nf|mUn>`KKHC*yQ*Ve5XjoFW^1xR#jBOLR$PGIKXYXvb1Y(*8#L~oQ5f07{u3Cp~Q=2dtrGXu|Yps*;y3JBnN&wW~s`d{KW@RJT~$Rob!gG zGuYUmB9g%aNm=G_A&TK)ONs1RyI?<5pG3;9$P++h0Y!Vid8Px;mhTY z7rwh5kga=k^YuM5Dj)-;V~MZC;KmN72niInb66{>Yo)4w zFy0ju!-JwlE6+$Rgvw%gS1mK(>bztp6+KB#6Fomh-g1@J&N8ztLg0Js=f$xDiKhv& z)gCB~cR$TLC3ly9NP6M~nLzf{kLhI21NsB=eEkzdRXH^8S#c4z-68kxV=&{ciiLFQ zFNZ=%T7Wb8`o$EQ|RI17@S_DMZ>mMs9b3z6bXpS-BC5({uo6lYk6*`pl9LnI205xG;ndTnUIi@&Wo;6tn{$kok=dJQ=!Zm*kY_<@T|#7oSsAXV9xh-tlgwg!|0$ z7DCi^gs3e1v%7yq)IWDvEuw^5$!{*^(9eP|l(rdOmuF-m#s!6*kG=$=`)b!P9CG>W zWjBkRW%@G+hrP|BByiG|7)FS2Sm=27ND_N{YZ`0La$>aoVC|Q_tM?X)7uIMNmN6)X z;=PIfnq9%r@9p}K>z9m`%fdirG`1~K+)^J?IcGS|z{Zc6r~X#XfrC!MlwDm1o4;Sm z^~pKCsMaeRC0nCwdd#IAiD&5JB1E=s*|F-oJiy0?1mM1v5Ld={Ymnsw`sDl3L}IpH zoRMmL)d_@ml(l3_(|#fm9J#=Ma96bpTS^SQYcjGOs256Gm9EP%5@V+UxpvWC0J0;q zwuJJ8ag3j0ZJVNXdm`rGW1px~je7<}2|7x#;zhh-n3plfPt_I1{4T}b_-U)cQ2;em zzyeD5V|TT`#gaq%)vU}KV9tSD0!*|}1@q%Mi^vWd^52qa#M_~x%z1Uvz6vX_&i zd-%r@rd{3qYFc`PY5fpcRuWZ1r$h6X%$0hSxo8eDmszo)CV3zAOCRZPnd>Ji-Eq2V zRDcsv>Y%i=8az)yZ^~Ox1nXXSIBnZ|<|;7L+63g@ebdd+rVS}J5<26KoyxQtj%%>c z;cG5A8q}0a9%00hH(TofADr{+)=1XKL;S6Qn=$a*2L@{T+96?H8 zUrr`EN~s(8kg^9AkVge(x@hU7Y>Od^u_aj^@`-}cqWdOdE#%y~=T{rsAE~ycp#&%w zwFqCgq^C{{#CsFu>C{KI87yvqjS3lR=M{141+cHb;G&2kwAXoMm-}ukX^7&%Ew5A8 zw;8(FGHEAn5aQ*Efh!0eeCE;hIMKZz!&-qvS;Twa+(>BtEQq;+4M3U0>ir zzO`gOym*Fs;6hp$us@PG`rBnl+ElLuuKB|C4;Yrigg0ATzC;4+@;oW7Se*FrVojS+jMP zUl|_=aa7yZbjBHsi!d~z_GK6}dRblJrk0q%`r$dR|0FWZzfk!*k*Siu7g>{(@h1(< zd+|tQqyJiDgkNZN)6r>I7egYb4JFQlBI}FZ<&MBe_k1t8&ifg4wPV*3fe-yc)|@L? z24Q8e#1Q1&i!`n!bYm$4V%Z~+p=fF=*RbUgWC$+&Lm!vA-(a895+!?lg}^FVJ#JYo z99@$Z7)3j`lXmJs^4uoF{iTrsPg3|))^eZ9j@n-`@;8akJO$mCUU|eX-H|!b_<*Dv z5Z&{*C3$bH`$*ywEj*O6=0wS;CveX}=mt@bBo;M93uXAu$i%PM4!xP=H{Ogpkbv-J zoF91eUy}H%Cu@X`f+BXtPy~e|>(dL)>UA`ICNyZXK@*!4D#phUP(INrO(|zigo!?{ z=z+SEi+<$En~B(|ve}28O!6)Ml3x`bN=)+`i3!hEi2;Z4C-6oqaUy!U>a65*!+08%CtK6RS)?=)h?iGRXq8bINX)2~0K@ z7eufs-Vb=aX5M4LJ4$h~r9wZIE)e-x3xkdtUPPM~Bya2{K9YEXR!|kZ=iQwo|4vU1 z6}uC1l-=?mU=<5kFK*2=#-7)*ut-cV=x2)!kL&)5!w{ zEL)cetjXmSIIk>D^IwerNS=$8D&X*tL%W(LhT+rMlr_QJtdk#Yi=WhB`~?G30@kR2 zTQ?mIJeroq!AGG*C@QVFkq>33pb>9dXPlH)GqBhgq)gNQib<_%2sOAxCfPdr`Uf=s zhnv(i3TEKw0FK^EJ!T zl4=-9H5`qh-}ez027p&M_K~m^M*Y?&2Nx@S(~qXXY2aCWT*8$KVi&mO8G8&nYC@a< z(c-GJuATL~crYE)uV-aV>jMwSg|7bRK{rjnDuP%m)V!-L@VP$XqTwG8Cg4ceO7fRm zwf>1n*otF?4zzw930pzJR#y0WGR%8;*wpFGU*RXAU^^hLTtl#!{$GNv@E)fcM#6xR zFkmDM7}-xD`>EF9rogK-MfuqY8vM|e!XAl0(bp+kK+f74jv+zv>crX%$-yz~YSDsmcvs) z=EEM^@iC=osfSE`yJ(dcRV25~1YHrF&^c03Gbx9_IV61@lD>{Tv+9a}*1dI)sq^m7 z6J@#Khm`dM5x8EQubC|=5BP#Fp#8rFPvJez7mS=+A?H@exfOD5g`8U<=T`K00(t$6 z)y0AiKJ7;SOkedApLUPW=cLd*rXOM`RrMbK-uXP-`P2J!nbAw&4)WlG10y8XOUUnl zhWISv2$(aHzV2V}9S}(ejNGe2?o}c8s_wk)bYnQF+?dx*QjF}Uko^?0pSmf^^@k@> zuv+6IA?4*ppdSD$zhl)`;1BxnGK6W&TKS6Bgk*Q-CJb(|@AnaJ`;#iYgE;6nePb6W z(7RFKqeTmedjo(z*T3c*v4%H4h3uzl-#fc|UH>5friA}bxT(*0?cL;j{i{-#4# zI%K8$*Ht<`B>5#wakiY4W)5|~g0c52^ zR=R&*r8~x)h^%zTO82K(4mrI@aExt&GmRk?_8DEo zJ+Foq;J&ha;bsbh55fa%w%FVupxlxRBJwzOIcJ{6 zp1pCM?dj+%4$C2fGg&A+RsB(#I=ZP(9Y*!Cvg>iH%PIj3G&(`q?B)VeifxEq*|X?BvFaeZZSO~~-3(=5e9V5UbxNI(5G2-CcrBIMdN|eU(N#>YB zkQMH-7|bq(=&Q~DRCH>&OYhZ{`Chg`IlhX1cu(dxq9?a2-mT1F@av7wWBH^~fHf;{L(wC?^A>9#`~%U^9GAu#F7^8Dnk=9m988)-98CI)q9eQo9Qotq zV*4=Cz;51Y@Bd@(Ex@AO*1qv)n4!C*Vd#+VmhKMe5{B*&L{LCLQo1FjL8PTb8tKMX z8UaxhQBl$FA>6vp-ut}AbI$kwf9E~pT$kcC!!!3<>t6ToUU&S~gNK9=(71rwqN8J4 zuNA0ZP%9ENE-*|19p-l&X)D#AO{5Am*#6j95v_+SaUH=)x%DCi?!Hw`u4srb(TsH4 z!yMk)VG0?nty#@cHy-SKdivh>eWUkUjl1_>jG7&25**vbqnp_NA>(qQ=6`8is0+lr zm((rWqX~^&xWf2O$%9iqR3O?Yi$967_2s&UD>;=-9BGtr`c$vSL$7J@Dlk2!5(Hr! z5e|uC3Z8fKq|)B5hR-5NTFJ}}^eTCu+JS=j!q{v_vx!$TX74xG#nBHh%2{Rq%KS?+ zP66BjuVxzpt>Os`{XxwO$C{d-z9O>^r+bAyP{j7#Vi{C zVTXQK^sB$umOO=H+d}+fi(dG?MG22@pgFo@Ym@=Bjnc=qG3LZJ@-SDIL+r1;>iBLO z;s5hRZ2~`&Pa$C!3A=|^mm*;o3A=}$4ia{G4nWr!3A;$xH5mB!!tT!;MM&61!Y&ea zk*D470R|-OB4HPK+Wo(B+C@^?Ae%vcr4ayGID{-5LZ(xZ>D2$cbSjd{28nb?q(inn z{)!GDkq(J;|9MDI9Mp)mJSmFYLUrf$qE?=;xap0$I~6bQC}XyM8u*yvP!kj4s?B#d%=PhOj1dnbuFAyjU6mpv!kbmLGHc? z^>ZI3dw)gB7$<^ps-IuneFO^)tSiM)#1tC#Ox*~4Z|8fJyCOGstrLS^t!(gpXN_;by>>)3h*V*_scvqu06Bcqb z#qu^s)v#@7(goP_t$bDw@P%#o*p!N55x!5-A>@LsR{SK)v*kUyrCSeErYPEq&vR#g zX1K?eOZzy72){@YrIxVmBOlERz2wKS3-#J(?q`J@);IEi^^JJoM1$3^*Nr>R+XeGd zOFza&4-z$DujDFGAWRD#EzCuS-SkHJA4P^=E?4^-k&miiesKq#chOLQ|C<5c-$&A|Bkn$erWmVnYM zOLnF-mYcct4hHw2mKCCQz5J{Dm(6 zlEhM=#L;xLf1F|5;!PQW+IxMjOBE2cio;r0o1iZ9d$#)Rp%PEiY##{LrkQ=Wmayf6@FUfx#&zQU#~@&rAhMoygCo zBHUBwnu1XmPoQ-!)o#RrHGXP|Cuf_n(x973cfrs>av@ux62&!si;29rSCh<5K2uM~ zWR*7FJ$RNHK-3Kds0w50^soF-3DoZ@fq!h?za8BA zfC=SmU;-OeS44yiiKi$#^I>T#IKyCRt1oVl3|Y00ZD%c=s{*?r{77Po5HZjoOX!NL zGmsw{WQ#&<=k>hS*P&{M2KmJ#btPel+mS&&t?K?dbc7Z($S9yeu957!3;Tr`rabJg z@K%NY*$fjI!%ER4pNUoyU<#=nm$cR%m9(~@T>7rX7b(~xZT~@wj6n-Lz_9p|$rAG? zvrKSY((3S=fs6mmzUG4Bt{}J5{Z#NVdT%0J;;0{G9QV|M}ov;-o~Pns&fPU6xd@suJfHjpz;TWfDYJW z8*R$*hqmiKp%9REW9vBem)-3r6as(Jkk4!A^ro}_r-po6dg|m*{1;)rQ3#+yj~iBh z>TGu``g_gzhQ91W+lrnK%ksB0x(;ti%J`V`{{n@;l*0W6)*Ax8s@vv*9~2XH#ig1> zm}wO*z^oa4-`I*zmN4BW>qg{Xsu6%3-ZNwg-ZS(It-+|kU$Y+k(-Z=KKGFOE$0D2l z%Od}EOMXzG*XkwHd;K`g#NS);K@x#;@Sj@pL69W*TM~gvPr<1_vL0MT*9DuI(ZFVA z?jIfQr~cUv_ahPk=;i)WyiCC z(oLfNMj{Zw@Hg5_vdDI%&7{AhmcW}x0(ly6L28LV)8>ChE&ik@pUAk+{(IIr57%0-!zC!=$6OuAt2fQ#A9Inn`A-712QX>OYjC zxOG+m6=x87%;<6hilTlFK7!Y@fcf?OwwQQaO?49v!bE%jkry$g!s9Jh6|HjJh=!s1 zM+>PF#w`062@&LqN?gGk3xWZOd*nsf=|ZmUocawkaSR`{)82{{<)7YjsGM!W`~{t$ z1P~yLzz`jcbu2B7>jkAA(U{EcP661L(oX!(29HkB>V{UDLDXo*7nwBcr%spa@t^Xx;twKniou4qW(NF3kf17;9?6{(j6^x=}#`dEAl4|OSU-;+5M~Ccr zzraOza>V(Qqwhb>MK?A7$0JTOc*KDm@ipQ7$?^A>tl?iv{Lh~ww*o=Vzu)tu^_ilcix|A@-OMczaJqTk5nS+chq@(H#qU3e|sc@ey4%_C4oUD{`WG` zHP<+3EBU`je$?vtDi(gjH_+8XO)`1`5)u#cx>d;jPzjXpD)Ea)$bUN%o!cRIUd<$G zlh4GH4>HUkcb=uMBi{oi5P`ICJI+GE%W zHz@H>8}GMS{`a3Ekt{nuAtW*ziOfbKvysSbBr+R`%trpmMhYQWc90l}jI<&nt;k60 zkIN5`jOIv2^9w&=B$8zZiIGT*L}DZoBas;SFWvefg^o)G%-cG0dfpy`e7S6BXh=Ux zqnaG4p}OMY&d_RyC#VpJQ|#s9FLKV7m@u!rc*EfinKfVnm;sn6O5P#0#smnysWV&F zS~3=3q06;(I3ha#9Ns4^wL$ zJRE{sJ?Gx7>ZSLy-Ct83oz76aX>su0Ea@y{Hd%D9w6a#zd(2=EXraC zTbtD8b|?NYTSb%PM?LM0OgYFnA(OS^4QW?z0`7S3oE2YvuZoqsnGX^-aX-%|Ii;4C z4gP;1Al_K42;iEy+^?(BpdoYjdEAkvZ1tgBFt zL$my#GeUJSVm9y@EYV>#5@Ttf(1xAi>A`IG?a`()?JT5P6SU(W9(e`d#Lc6@`Mxr|EX$4z!t3+)?F+_2(eC}#9-9yWNTK|;RG9d!r zRzpMkRlYuD8C&fLN-J&ii?iU`mqbw-@M>i(N*>3lb?~q|mp@$HX&; zDJL9ac@5JmO43vi?kF#FZvSR(%IFVSEg;$U*9qx}DwBOt*cS%Pr+HL}Hra-ir}=b0 zcbSm=sf~hYn^V8kN)BtR0z8c3jUWxtcB|%<=Z_Ci>fUAvCXJaB^dcVazEF6& zN=R3}d%p8jgzV=}LhcAW>dT3gdyKx|ZF0~%EVIqL>S?DjPJ4NuCsDt9oSH7mpA7u?c0K()mW~=VsGZ+!QOi z-FNBDv4Q9hxi^dJ+-p%3OX*yE?iG`nkKJdFi(=>0%yT*W-hTW&;f}IQ4?PwXC|EF) z8?(OO0X-VKh9U|;q<~MB*o~PKiJCO4F(f|C_(AqzeuY}5897QbRFE3ca{E*|o4B?V z#Z-fy>nA8N|Ab;MiB(yTKcOWZJbfk9Qw9aDz>%q9;Xa>r zldbku)#J+|=1vciTZ{GC{Jl`1LBeEfG94*CQ*hN8tBpG_^Q#YN?^o{chSj#W8LGWxK_b(gA`~X${-1dFR(LDs63meS#phC^A0Km12EweL@cg(<}SGk zLX96}o^Cv7CB{FJ!x&uGV(7_U^0aY>|FjAQ{9ukt&Cd-SjR#y)M+1Hq;qBw(;ST4Q zv)}bGejoy zmM#r;VeJ#_1EB&td#-aIBv}IS?%V1-hO%+tP}N_IQ%e1k#~Nq2zM}T(qZ&34?A_84 z4Nt5l&#w3MY0>f$=71VM3@~iSmw0m|Ns=2BIHycT8KMqldeeIEi%b%|fW!@@!pC2p zTb#G;%EpAaB`Frb9>rfX6wzTB&3?|<@0=oH<{*@^cPlDLKx!a@=;pQ8u8xZz7Ml1j z4X@{EZqzb`Lm2psX;7|byCNcjMAKjZp*^Jo+JsbVIhWVbw|YfG|5^ui1i6|x0+uq*E76G^QaQF3gI_Kx>;qAi>mvwc8AN__8 z+#BJ8@IH^QJ&aP-Y(ZZJSjm5#nZ1oF+-a7e}WZCQ%6O+f3e`qFkc<8a$b zdh+Skcxw)kZ;)%#OxMR!_0}J>?s=uXsAHWo4x%+q?}xi^t;G#oOcp%r`B;Eov3<4k z@vhl+%Oo+od$MNkMa!Ob4?5gfHn;4acsATiS_0V8A*b z)ZYvJtc`D)=#fbf#}a1Km_IW~H1pqOvMHPpK61%|SM2!RJH zQ>$P6RAxs$!pF|(?fal9ac#%*Z#X(iFUX6uYt7I;i(!38d2Q$o>b?zGy#-;?4Yg^FvGs*6> zprhU$j|Y99Swjr0xQbV6K0QT1DzU7I#%|xte<8*_JjL#^VI3Zp)Zt%)f{BqRy&^(= zeXm4z*<(syTh3GAOtsG&*9TY0BUM$0+*djM&yMGtpU?AabxaHSOzBpc^MMct2x7T% zYL@_~I+;{n|CBr4efDuBfspWcn!==s+<+sQe#KVZ0BzN@3N^L0tQ}w#HI&5^TauAj znl1iCMEi~i{d@Y;`)hZ;L1V+&`jx%ju+Pk{QrwE|sPT&8OXJViBUU!$IVbx0I^m`j zP%4&V_1Q)Jtl5F(0c|Hv>PjHtNcTN7Rl*qptoUh*o1!>mSyiK~Ugh0CB??`~hJn#o+7hhcK}5 z_O)^KaC1gDTnOx~a5*V&gQEiKxLsp@>oSm*3z~dKGh+*4XjlXxX@L-$%)N|snc`Pl zhOv)W;+P)Z!c`CufWi~WZWbg5-Zi{|b1-ks!|E?jM^X@`6}KuWS!BB;<;C zL}ezO%FFigodBQ4;_bH&xUTMH=;vL2`Rr1WiSW{tGB_ui#-gGdPw!J7vcywmPQ2zrR8l8Y$X2EZV9@CpQPjopRjycUbQt z{4Pz0zHK0UyY(8y&bq`;^~|N6Byb0l-yJtmv0z^iKDyTx&OrDb)12Jx5CL4^RC{0G zvURla^hJ1|xE?1Smx}CnMF07tp!ed!<>L#^{~uvq62IuwN35Nar$)m4ExZ53m8njn`qcOe+H_*fKMI5_Na41kTj4-e@ zS~$8L7H-!B&T9lA`Hy)GcAPq#SF_A_cERnb;I#IJq7kC;!4eD~H8u+f2F$`-0wJHe z#m_j&>_3F<@A4-@fMlX~cEANyY#QlM&wwg!uYaIRB`*9vnN1+Y6xZ1Ozr3g+ge-OJ6x zfB;Rd>BnlP2fEq}3V0+1Mu3b|>n=7by~9nc({mNDu%QAsGw-0{M{n~l)dT2}XEE<& zChK3H;V058h`f4{GCzVdpp5 zBa`=^zdP>;{?}mGf5Yx{j7ILx|3$mAp%1w`{}(N1H*$A^Czby#*r`+NXo~b~|Kpa^ zehfVKC=yX5R$zu~U#(64^ig0~0No2_gNxu`+NwG_&MSuX7o3Bmb=jr~-`vKD?Y^O8 zJfl8IH@~lnJv?E5@77)Q#4Bm@GN0arC%|BUJo)o+Oce{kg_!@G1O5M>&XAwqVG0GG zw4e~nb9z^Ay6Jv)M#U#hNtn^yw#ck3AB^Kk}@_RaTE{7HsGM;MGQAAM^xDh$v=r=-zw zBc(~z%(xb={F$YsnoTx6xJ$?$5-Ft zQbZqk>Fmb_I-5p@ohwK;ts;o-<%W4LcY3~hfXlRIt~6~G6u|PHe2*dY3*1j#-h%}l zsOD6#SJAQ%-h?pEI}*Y6>!Z<+1o;Q$Z3X2GL#I5<9#JPMg&7-!yfkCF_q5QWaWgPB zvOgWi3mTi1g&9IX!j?oqwa-Pm(A^>8E^jm=t?VIP{=s2!d3=^{u7Do4J};NaKS-&s zxx+t#J4RRu*~?bO@gY~xo9ir8qxuaq##_WmHs&9c zw;l}05)D$&%EXhBlbw!Ufb+*jQS{Q)HNq#Z@n;w3#L>`T0+7neY|#yrG1o|@>q{Mr z;Yk)F@5KUl<(lLZ(grKaIF!iYuvo6<*hQTOZoIzFNGB-Tfw??oygfF0QN#A@*%x@@ zlBG*a{D}|6m9$^@=cl)w1_l%jQi41pzfEr-qwK2)0@>S-RRuYl?V_lRVc`4*OcC?G zIW6n%%G$h>xOT^jrY-xuN#L$*t9)Y8nS^TSkKU&El?Ly>WsHG z>Re`Uyy2Zddxtk5pM7z9CI|CSZ2Z7c|SMW*TWj3g$3m0 zC8u~4mb$(~-STn}_2)%T7t2qSN}Y^Nx6ryH`9@at>GbrmyfXGO|NIoUF~fjlbSfI1 zc;W)aZ99|Y7Yhv?oTyT-nj0bu__~~$txHMYA5L+p@1Bw^*BLTT)Fj@v0yaznlYXRu7;%& zuda1_J9Z+!D!}&`zjQZ7YTHP|t=}6WRvou{;Iz&z)r8s0#5{jm|C-Ed_ouvD7M@de z4~ACHZnUlOK?ik7>_f*cdW0rUx%Ly+Fv4+KUVL(G8NspLEOIalrXJIK{Lx^W6zgyx zu7dJjn~}O!ymdPn@Ov4WlD}d;9&H~Egq|MW?FzuYU{h=lyu1;cmp~gUl86&iY9C0> zAX{wQC52kv-cD5@90M1EI<)ur($<$9#NNDPtOQV=UJknZ=z^NZ_7z=S?DxZ|Q225e zIGQ^FGffXh5JnrFgE}gLqrH*@ax&-`%wxtK4DC?4?wtCGq4p<&r5>N==c1-LTjO zrvEH=yV?gnyk$w;!kw;CFB}5#?7ENg?@_};SrPdO{;f_L`R{I45fqzvQxy*1Q99Bu z%adhctMg3xtF1UUr%yHoP(4Gd~q_)?0 zwk3$|Ss)**cFFGJmJ!(NEXRAuELa|h<9Icrzh3rk{RW1hyhgr2-3065iaZnO_1Ub~ z#b>Ki`t@^G%!pVp~6>g;`Gy;^Li<^{t0RPCW67S9=8>-HLVZkUQNs`{*uD5ZQ( zML8Tq+rP3JCxd|V7P_KfTqY`p-2{c$xVpOFG(Yniq?j@b;B0n7C838nm{eUzel5!(`BtVu zp)cG7Xpmb-)!r$)1mW+%impyTv*#ozD1H+`EY~vk#B$Y$Y;%9v$=m6XQQ6=a)^` z@B9sW)(8^$FH91vcWf8<8~WLjZ0eZhpL8*RVCZPgXid96&i^)P*SbhG@54aEcQE|? zPPCO|BeRMED+=OL?WCW2rSi&$3q~>?alAJ9h@NX~osmY|E5GqcbRc9gBC$o@`Zk2ne71(8P|^PvHK z_5l)#5HZ|)#T}aU@qA=XtT>#v6xj9MX0^~lHonEm)7vr+thA7%QGc23)ETnuxhTdY z;+({&AtLb_HfXjI!HO=f*-)`;{t3pLm1mgYue_U;0Wu=F(|NclT zVNnrYD?wgCUOq7aAwe*me^^vx@)nzkRtLKZa9M81WOAz}@Huyy=oJd-H>%_@m-c8yxee@Q2m$I-61?MfL@?jT>2xZzqf!JbhRmHkl-q6>G>$<}1U8P~w0&IooN6b`}%U85HJ za829~C=!F&B#&wV`1k6!AAys@sGBQTUj3DzYgVUn-tq%LY*P$q32U?nwPCXf6ut|=My_MJ&*R>8cL?XuRC{@eu% zb^8n~eV{C!}hX)7c|$hug}-BR)6n`?L4jcr%=*t;N680Elr zr<6U9fph7>TPcUzH<>EbC;e z<&>ljnQP;6I)mr9y=QTsAG?*@abo$6Ml#CJgY7 zrl$0aCN6lzB+o?nnkbMS6^<6-!%iOE_--AGp&4>-ftNO2xpRi~bnsx~ty}Z>Viu1H zT`$C(&3uh_%Fa@(pOGp@G`eZPy`qV`jFpwxLi(-zfXBz`p6g^5_#<{Pw{TRFC|UZs zNWulmL)XpL2Oji&z(5BakJqX_T&Uy`IfVQli=_yG(U~I!|9^Fv%)yOU-v<`RY(Zq? zo0+%IU1f}GsP%N>iEo@epQ?X#dH1amOgVUWg?3V4)B`GtRtw_Am+redVr zM{BUR)Y#tJ;O;$ha2g8a{%+&-gLwE>m5$ch;X2SerHZ3kluq=S`QhWN?uKpGF7jT$ zi9nbSrx`sOBF2Ew?i@KCyFcz^b=Tys-JUC}&Kh%|?sMFh9m?iLphJt)rdQ>oF{<7p z+V;6>9}^2%jiFW6GrnIUr?@vqS7K86EWRkg*$w2=S|I(4cr1%AZ|?fIc9VfYgn*M> z79mve$oR*~Ig*0)aQ&pzo^Du~Lu4MR_R%y7{kw{xQD@~&UA9EZUG1i zFiFO;$zguD`qonbDJD=lBLZ3=I{n!L;)JpF-#_{`vL%v_LT<-iIV2@(5g3odzvMGczn42QY+Zn+>rl!?;> z+qqr@rR$Y81clyhZyQd<7JM3(#%0JzX=r%V+syEiL)EtkU+DSARxItY2EH1;z_eIA zFDk3`+9ze{N?Z>`y@~918@>F{$nj3)UIidlukW3zV&7W##A=3+U=iRXH=uH3GsHgg z6x~FyQY~W;-R!^nnml(sagAl>? z2X+0s9MP*`-OH!ZqELqAjLdZ4AN3ppOslgg9)!Q9Kf6&*k6IcYb=mPEr&0cZC1Ppo z!1yh3fPr^pw(q#>%i#U_%KT=3myzTs&S~Pa9A&yy(iT?|%Xf&I(`qI8g=1CU5p!Tc zWw*FWa$rBq|C8 zDh2R^FQbd)dzr5{+umn5YJixvte zjg2LVSQw&2FcgRqqTp4H`ZS^9CM@>@)otu3S!%w%CqBh40KWg@NZx%Ou+s*%}-HPOB|`X)a5F$+=#8OWva;RgCJ~5Bc_s z9%>~&;hNDE!3W%7nAsu9h9hg&o|57B2nq`MNidlORB-yrCxh>fLAS5xZXb?ON<^e(N- z-NYQttGs3UIHO7bmA5!z(Gn_~*CR_rjB^z(Z7B#Q0}upCx(_Aqs+2#HA6%EOs8$V`jO)brY1^8dbGW|6IxwBp+c93@5TE<* zN(glACYPm@5Q%O4dYR7`rF`>CFKDnZF^eN7)9FJ!5u!Wq9;`-!b`>851JL&ht8{vK z8pk79&=CvKB86JucT$dCGzRvmsDP#5e9i!VeX4weZ#5n($@5F^8cI*~EeIVfbKrq% z)FTRGV;5AygzP)#8eO!ixt33DJ)&0EK3T=CBq*>h)bw??m-Wn|Uoy7EzL2Rj&8LT) z>tq9O_$czE*2+v0{CA9OWpHRXyFOsR01C$8`^JWLF~(G*N2-_P2cAPP$jL))<3`E# z>3zaf{1hB2Gw)8s8>)#0U_+X(GFp?||6I4)VcJe?itmO?LwiGDp6PDqqYE6-L+VR; zW%N}Qds%xU$>0#n@d2zp&8bgNYHYyFz5RdBEgBtl`RDRudVk-|QrJEjWm@&k;11zIowzxmM48%w~SXcF#tPEB;Q_q5E1RY<+0~{ggxh zd}{oO`(@4q_Gr(o35TZM*JXM|)lmg!!S+C5KeD_t3egXSjk`&*6V z_iR`Qq0r;t1@()e`p_k*u(nSOm=UMS8kS4TqV`S2jTZ(T0eVSYA=JG zqdw2-L5jAtnY`2Jx-0&2=^_jRpr=}iqfxDe%qG*Xgp`hrZ0WGjJ8!o%*p$wIz|ts#5GLjZjAR4x{Q|e5~~}CGgBea+KF{;GMZ* z5l$SBJyxVhByKYeb)7sky|-H@8B=b7nd0_zPvkvG%q%aUyW%B$h}Xr)Xk&EMo+S|x zS3`7^?zF~*9AEv6ktlZ%kN0$ zfevAvaJ)-2Ha^ZYrt&nCLm)4`E%u^cH*V@Ur778jD36o9^Yfr|k<2G=FNW^~T-JL7 z<+@P7e^G8Fcp6R{tufU!{C4bq)x9&$qdOXJlGjmfOtG^3!n(UN64e7p*YouU=j=NJ zKn)_o!lSHspmnpTFXi@#UP|UgOZG9IgRF^HPFYC-_^2X@6i{43yihbMjVPi;-_ISr zB=~rJ5DEa+$2JGNN|(3Myqd^c%gFKgU3a*`Qe^nkr2e-7^EIdfX7`^j2)sAZU+RL` zd`6J(Qwtf~61dJ*inE=^45TFs|FM8_uz}pAp zK?K+EvqiWgjw2aRK&ZjV0F!2z`snx1#)G|LZ`NP$tdX14F@#dF}(6I;UEWvK#yaDu50gYHp7`d*i9e2CNwl z0fGrBi6mNAdHJ-ovmf}+< z`cn?Mv+s7dxs)5&2wZKIcs?22*dw=_KWZP(*4K4 z%s)7uA7v+pZWWiOjRS%UZ1b~mIf2z#KQQhLrsfZWKr+7%0(oHADN>3V_Rb#%fljTc zfI*;rB`^p?MnOJ9e)Yq+p{U9d7zAoP3Ie%rR%~|EFt&VLIWzL2uuQRs52HMyC4AN* zNMbJVx~b}pxN6Sy^hL}=jKTP042ax@QSnC%$P^4Nr2c7C?{M?|F_?!4@U-!T8*6I7 zb!@!B4n??uhli_+lkabya$FCaH{PV-aX;SZ9T;#93r=J0VAv;1M3FNasi{@OxKT>8Tb>HR zcp3N>6dl{*Ef`90>&?c+Gv*BY(#<=Ut|mO!F;&XVF;C_%jeE_cQb<|Zhs%a{nHST+ zBbVN`>@^`e5P9r2S4A{cKT7-&UkJ~I0t|!Xhr7k7%(WGVc5c@cD$T-HS;&7%;jF+NHf^uNMlinRq8z$z)69|FZ%z^#DCo}*1f}!7H-#>Mb zve~j9wvh61@(aKfkJiA=#_6!B%Lnw{kAk$QfH8RtjihKg$&9o5k$JP;1cEUEmKh;h zYt_eq1rwnVVO7d(s)EHlA!nh?6+m8BD3Cz77K0n$0JwqR<-{htYw!GH-LG#oDt3yx z^W?s%xED9{EVRdSUdxn`9EZD(NwmqaGwemgmO=&Uco{*HpJjbqUcQU`jnVfh@6F68 z+4K4KltR}FskMvG#%spcRYq=~j)HSAq15P<^my-rVb`)W zFt~t$6N!o5dxgcgP1*BvqEIg|^u(ubO!sl{pZ z_RT%-?9pO*cyVu=$x1M-H+hXPVu+Gu;`4lB4yt64VA(a^3!F51c0~9bPG#tuok60E7g9p^lZfusi zIVA9o43mwe2PxOC&U6G9&v)sZI;>P*Df>#3GVj1J9o5y}f&!|f>_yy{uE@kRa<3i-1*jkM zpBX?4O8Co|z_~pXfCTl}Ir_`c#~*AwNF-_`AP-m7(Sz%2D;XHc>M6ptv<+0{6@MG| zNDmvPkn#7-&GsBBur$if8X|^?Qvg8|m6x6Vrm(__@-4Mbd73_4@yhv!J5Ljyp4Y#r zhM`J>(F~!4#f5+BvzRdUm%5k9ca<1rs;Eu7mQVBzx}|r%?dvn>PhhQaf>DnTR$F-1 z<8F=WsXs|wU=B=1n2nQBt6qM-vJkozAnG+KM#ubz) zs6tdxL!L6FFr}Bd?JIuL$Zn$C8%7(MOAggQeYQKSnw78<#$wo+YGk}Kyh~cc|7@^( zKFasaW3Kdy?vaIsGcKiCiWL?%FNkPdH_ybU$%F-^>Eg-y5ahMMsGX~K88A%-L_ivk zWR9EiZ%~fTVWhwTSk!?57InxP0!#<5hd6F}7`LPqyG#Y6U}(G}-#8tw8%wVSb-5|S zNOfC%8J->Xyb+oQy)f?ib}^JsQtZJ;!?IW!j72u4=z=%CdpgD2db175e039wFJHnY z^OJfUA2=%6>cpFF)i7L+<|ELKev_iFKTum;!)blSS!|W$GU!rpMi=&b#qnCJp2g8L zX%RCo6QvsKq7=pvYW&#hgLC9mi%)%b>HmH#>SuNYJ~1&tu0x81<0jWODbW6cUaXD_ zD)XbOZdC_!1lHrbO5;UByFhWI77-C73@ZeeQ}qJwD+>0w2+ix;R1I$KO3l;+Di;M1 z=#1pN!J^M6L*}iZN$turicWmCa^UV zFt|#Fr=Rg(I(GM$o`NJC(KH~r3Dk}$!R`aL5Dg9MI4_sn^wY|S#$=|uU&kPr#-8WuB@0Z82z#U&jeC5~hTAANzr%e(1 zNUgQFscUHHa_^nI#swVuH4#P1tfdX{WaHqo;w$O-FkHY)z;ler%`}w8jzHxng^(c- z2INM*({l{PgHGT*YFZuHYQS2S+n6s*da)|!-TAwY>wRttx;NT1&MSsYx24PPeo<(p z2+<^w3#$Qou2p2L7sg`*zeih1u)7&c5>AobQWB?wp_gjDZCh+oNDGosRsztoGIzR9JnmR!3zUvl0ht%M*%P_6hBljx--$pdC<7zRC%Qq9#vbj53j#t)kruJcOt zz*uFZRz5XmWjxL$l4LtYqC<#H`~>|YM5eZv+S$Ba5PPyFl1<3FDQNW zQRQf7DMI9b&m;jv#7h-!oQP{}0r;T|3R09_>sU@*I&utdSqjf8r_LhK zms7k+@I-0qo&G_omqhQ?8t-@k+U_BtXEjr82YJp1oA~~g^-N8%1&ptD6m#g5=BhB& z`$q7SGo#uHJ+QbvuV;AjwWW)Di@koRw+F^yq9ele>!$RGSuftC%o0&o6%6LGyQI;y zPu_MQmFQgj$sa-p7`RB!sNXi`Iqmwe7cTo6KNJHW=OxV$xua)B$fGyhAK5wEWO}L@ zzNhA#fH5>sA=qg=RUZM4%!HQgW}z=jnNV>`qm-LVLVWTxFW109&yffvs+XBuuSJDZ z#p8kyy%Zgb5DyzXU^BK)Awhm>;>B~_tEwH-d%`y^zbXiG4-~uaWEMpKB+qN$mbB}} zGy3^Pj^L7DQVQ3SDiO+*3b{3_4}X!%2_#-P=`T2XyBrq=)JIWKSyy3LGdh_wP_;{IKlfkFT-GiA z$nb*T;L9*ebG+cphg7$#;J*;GuE~y|t#p&JtJO{~%%sX50|AdL)Nfa zvx=aApD+oY7RuuJX>m2ivq?N+nheIL6y-klv8{f5ur^>#W5t3B@U@b>8E7}qr{1i6 zbR0f||9wHNg#a#4(G&TY6Gb4rz5Ju&BhQBJdOZI|df`#UXF(m74;L8DIjxuy&sknl zoQ1Fh%;3wt%Bo@nQ>tCExTPaTsSiwNFh7Uo3}ennL{0bXpk&1K*b^>ETny^Zpbh=ZEgs0~ zKPP~5)9NN>?TsNB{t~+{_G5PTY$P}mk^xlc&Sn)lwfllV%bSt@%L_&5n-kfcuWuA^ z_qMmO&w}7$2Mg^-WjA)xfAes`Nv{VI?T~2q{{h;40eyvY7+}6b zmJ?ulF1{-AFv=bFB&Ojt0hHc>tZz7E`u=_%OM5%o#V=>ew&$(ucRm6zV>3)M0*-Ev zN02z{uIq~{z4Ce=g~}f&mgS_o;PPxq9f1B<kbzJXI&cx6&ed-0CDk(FV{&5(wcS7%0>Cl|?@iBrhmYxZ@TH|LUvqROD)tNOoF zrz2%g+AawP#%cYQ~m%vQoS=2g%@cl5GN=f#zawNpfN*iF7&pNChjKq7C= zw_Vco!5>a7AJsZ|=BP~1vn^VY;4Re62E&R7JLh?xa>?bPgL1cU5E%p$5G_gYLcFti z;N+wDq`+nhQd1o8?1Y!fx&&y#0Gg+S77NAsw0_K~F_hRSYTO zeIwIRxR6vJ8QW@{g88w;rkQqEb{ssBQ@k}wNN{;ZK4rRh_Sy=DnZ48gc{F_aaQQAm zG`y6tLE0$^kLhue4fBUB^ZGcpyNy=O3AGJFdzQfx@e+bb4di1y7*G(+VX>hCmCw+v zuDoc;n2(7UHM}98lCoxsxu`j=yZ70^)@%Sz;yD%>aNQ*?pMAyuLw%P`)ieh0zy>#^ zN2Ux;^Ky5kXRE|aqN#a<^cYZ) zaOG`irz+HqBw;oyZCXu^J)2R@6e1-sxFPioe+XbG$O*m~W$j2@qyMfx$dxjS>$Cku zr4*m16j}1-&WiRS)v=xLH;HV*gzzUZj7oXlb)FaFSk>g&)_=i9?{Nne%YBAA zHZgK6yc>&x(pa>xGQu5d!Nv$y0>Q{KdN9j=N!SG=$()aA(KI_f=M;aN+HpKh5pY8T zmb6dPcsfl3@N7%|p+;S1KlS!6@g0z7*+9>z)5Zj;0+>>PMnNr^^>3B56LQ>*n`9s8 zxId+L?(N41TN@Z{7-AJ%xErQ)K6TO{wQ_fOK=Tn@xXcXoi|))0MY72?HBp#e9r+FinTFHiBzi zB}g!Pr^Jnwc}a{pNO&8A;t7JfuYpdmq{QeWYJ*^!?YlU_ zXG3-F+oosxu`Cnnsj-~#k{Gli+b$Z_C{;5Bv+wAD z{Yiv3ys7vR!H)>(82|v#ZoG+0Wq_&u9kXa7u_7L52w&~3=GQE-{sm|urGsp}xZm5Xh*1O)B7}gpy zG-Wzi+wD5fV>c@Jy6NWb=nTGry5+gsBXp+xAGK4zR4nj%7i^1#h@jU!S*{h|-x&?9nOi=yRtb!SKI^8>Cou2}gLT9RnXIm~YH2yn!VkD3j&J)>8sW z%n#XGzHmO!1AE)<|FHMfQB`Jd+Yg6^LxVINI;6X$yE~=3OF~e(yBlfgloF9{kPsvc zq!hs*R4~5>6m>>t-ih~J-|t)ByJoGKKjxgne)itaz3+Y9*L_`^XzK1f1$X2bPvsEJ z^nfxXU^bqCLfz34Fk)mlO8a2P#(7&W(5k{B^P&m)Q=-Yi713lWoLhQ zr~j$0y(Z%5xXgT@fZL3IQ<;>~K}>Ka%Jk)M((M}eTEC$=q?k$wiMBX?B<=Z*<*@$V zY@y(i;VP|Oq3&orKvkH7A?ng3k~q32j^a{WuQs1sgoowAoo3zi&GQ*;m@rh6BL`bl z``1pf2z0VvK`yflU=SJD(%_;vdGn+EwMZ20QBfN=UheaYU`ZO_i4zI)ee4K9ISt)F zw0Vcau)kFl4)eO9tDV8vy_=j?H>`>{@@hP9pdf{u_lA>8)M1Ce`AP)=De;cZ0&#yN zB~SNg*s_2yYBo3Jf(YC}k10j$1@yRQHRjP*n#2x{kupE9Fa!{Ba;#x0DeD?2NC&t? zk!yR^>IU+L2Q=BumneymEiXJw#|P&Zf{I|_C%2!oEVVvgO16L%apwS&XMrUx&Us;N ze@$>k4gZ5O2{sV#7*|n3@O&HZdEe6Y5059rbdhaJ8|n}_p0PJaEV&8o;?VRNg~gs> zru`r-q%VesN?e5uxJ3G>S{e;zyF@d?ei!RrSA}Gjmn>cvf{oF&J+xMW1o0AO@wX$p z7{#@6_LW_G)$YyQhx-opPq1rP%DIn{mb7H)eMWglsuQn;;(XMK9Hb6;% zL=d})LxS`SdGc}C#SKxk4M*&C zIE>|zs8L$N%qre4CE&gits3x24%QbxP>#5 zvp#}Sur$-ek|gJr%*7!LNQB6jR?2jG4kjrP+F*~h2ZNXE| zI5Ait^3q7k2Gv)#0)Eu->XC6xIn-{-f@ zOl>K?)Oa$sX?Vw+s4$|^$<+J_9(bU`qlY)uj=s0+=tCkuh={+eDynHbzA41!8s|`Z zaEW9T$0*{S{nNv4T_hYJQaEmozTxqUguz0&#myW-K;D>-h@0h-I-e1_fn$Td@u0^u ze6a;v!S**T_c21o?PKcoBs4w z;|rnDSKj3LO%I#Yi8KpZrl^U~rt-Yo9dswL-yhLK;#cO{1NPsF7VqsOF?dWZrklI5C|}ublt62bhVzqcl;$#CwWj(={!| zzA(SHa6LGJTX3GnIy`3{h~n)-u$tojTKA1H%0`tS1I z|3ymf4}e|vx=9=`@z^;aw8*Q3+c}Bvy^r~@3XiA#L?W5ZDpABGxmrtQCV&CFrrW;X z)QQ~FqNZeJm`~=}s)g^k;lGWBg#Z_t9K<1DdA;3V_W{0B|2>?G+tmyVhnid$>|9Fg z>$$vGl2~Zb!#1uJEfI+a)w8Xgr#M;0p}0^kgWk*2B=k63>w(dKJH5|r-4w!jA0vjXbyZ#k z@|ij#qu2 zg0f*|gXUq%u7JU+2*`sor&*jaYsL=LF?Mu8S)@jvzqwKM<}?NT$L9(+sOxNX$=buq z-V^Kw`xe=L*Z&04dAOi7WM)c>z*AWAxnv)yHS2LbaZVIF0!BG0{#zd*+F)%Q9u;oF zQmmz1Zl~KM;6PVxO2A_5Wm>tbJD=)<(hK2!`HXtE{RSWuruCd@LTh)EdBaiy=HzKy z^RB28Um07^T~v77$~lU@;5X-0l}mwYMgGrBtr?GrERuR z+?bSN^tLm)d^H80;7NAj>qW$QhsmwX3isN3V@O<{Z^Vat2VED?-$f@LOyAoGOK!{I z-ETR3b+|@M;Hnr`Q(&I*4vG<;Qf6EmQoO2W(vxpDKW#zN9R~$i9ihdt@9Z0tvhus* zh6_S^HHdUV;e+U=2hlb39)BsWb)0lG@FjyJN5@%!+y9BC5&gp?rQJs|OH=CCiu`Ct zH0=^$=1CyQkr9N}t0F`mPco@SET8;4_WA_!bTbsv5{*%_D)&i8iC& zu!P(X%}0Wn-X%(yc6iMd$tPb87+Vic}D0rm;5488G`%~?F&Hw)F)Z^mf7vvHUXI1^GgNt&rdy=ZTR=Lg5Q#N)Hyl9hO!fW{mETfoXyqa?3IW80Lp)5?0}fjHkxkx zgydNtq#4c0t7U=71YV;Sft{i}@oX98_vhaljNV5fSqflMpL!pA(g+EL0tD0@kqF6_ z54fGFv;`OK*(>jMVd$qKZU`>+^3w>dZ!>h?%Sn7XpN4;RUPQr3UFPYNXq=AF7UP&Vk+hRW}+I>?8hq4*}{jitBMWxvtmEP}qM zYXW123OnKJt3(-)NZkW1i3`RI5GX(*?2Glp^hSgBh(AhyO^%B8fSif<{41?^+4Jsa zy6}Ip9y}bpocx@EoLs+LkFR!Ze`!6ez`ct9OEML>9-za8)rqNx_}Qv_Ta;g|$go#G zdPH?jMYY?P5^J0@Jdh$sNE8$chmcA*BJ?8T0nYuwzGdeitHoEH%2Z*FNNbID7akC*Ca$W#(sMQj|4vFsG=Z~ zQpZ#K@R~{bn@@PKe z9yIn}xG_7ZgfkgsLo5hw3TO`@X9zg9l{nG}=1)u#3b4w@obQ2QE|ooplXx|NyV~xw zPrMlJih~F+bLU+b&xq(&ML9bbVfx+>VD`ilrV)+OwCNF_fw`n+Lry_bLNs1hDi{2T zb4&Bv@veSE{p;hCesg*TT#kM_spQ=1y&Kmb6=OeZM`M1(M`Hu;paubY@Xk6DVeEcq z*wZgo={r|Y+WeBe6-?V3lzI0!ogf(8+4n$s_HSfVO;-yr6@ls5JK0$~IseHA^-cui zJz&b#&fphpPe1s5zx?=%KjVOZ6?8kRX#PwyJ^ge19cK^l6X+(VssmHdQiDmIKmR*8 z@;mYd8?FVnZ44!udNus|HTH(%4Re|&Z|0r{Ti>SHnrFEU7cCh<*a|l;uE2aW6;SDO z|DX*2_LY``iRUDDf~N0oBEM^DG#etwmLifs)8#Ai9eVG6_ujMDaAGDfu4Q5 z3+cP0gIhxBFlq&+C;Y+SsM~(i1i`IN#}V5vDHt2p?i@s1QhDV+923UPfkHAT;MH9WG9k9DZ%uqKgKOe}(T%}%NVXu%GsdK*iPZGC zHgeLB;*|$Z($Ka2_7E$w=!V-(_wII!D`eQ?-9(GrP8$9QQpiH_zeSRN^`Nc<@Zac! zze{<3HAQ0V>|hpnW`M&e#RLO6Ui>Tqf+r?8Ad&gR+34h;LIP~E;Cv*wVT4+cuY?bn z35X+st)V1f+xNAjQO16(>5|<`M=OX1$>!mH8}FVJqB_H!uY_C2#vtQ!nUGPhoTGJB z*APxGZ<(fKKPPE!{vkJYQ2_6$*|4hF@J5mt^lAVB1VAMCHWA+g)L&h3@Ns@#EVE6p zGar$F)XftSXda{3U>H_x< zDD~lY*2nqtxGwX;1AVgRh(SXn{5eV$X$O6l_k{{lBU{QFEVnt$atWQ`VidZ3=WIJ7 zXU(fdCkz%V-mxX`vy$5qGCus;ox*#G$(F5Sy+xK9s9R z3h;mjQH9;m%vYAbKbV4h$etr{tAt#e!7@^st@L}}eEFR3ZDvXFz0B>xZeC|}D{=y@ zVRcoNnz@c>G-v7|+BB|!OR6y(w7iF6n$4oO9jS(xC^Lf0+&@@eo?WjXLg4oTnx8G% zyNz7{Nzv{^EIRty+-L1quq)Q^z<$I@cMU+5@GRyOA+{cav0iwUVv;C`g z@`?;Rz$HgW95f6^G>16a`m%=Zyqrm7=tq0l&JFV(=Zns8$Xt+P{F{2!Hq^z#VvYAy z`yJkJEpA>2e~zg~&Nri}mE}E>MD2xtHI5cuvgt!b8E?!=5r?lrTu*j;wbs!(DOek{ zA^-N`1jd666OqK^;?-yy*BFu!6M|rS1dNP(w{yi`ML$c7cG6V}g>OwPrNVyw8r3m8 zy)b^3wuHa)3Ex76-JyQ=w8$W9tmS>iDYamZF8FmV^tOx!qxX41J$`Q@n>6hlLkM*H zQ1!Qk`sY>`D8Sf7_x&&13jUeh)*nS66&Xz_c?nf*2}uQI1#JVEs|QS0L0eTuOA98e zrU{dPsY_^r+-4nR2~C)~j;6YrmJHjM3kUi38J7xt?X1iYR^=-8ET`;OcaCn z`gt^7mYX7h&HIf+I`zj9-78%37GY|&>fdRc@`?y+iLkEtcqg|Pf?c?jS_ z`EA@rOMm-(1WyhhdoNH>>BN@sYp@fBd45>~n2kLs)+?o^ZlItl_jRqlXUO1MDcHbV zT)kLeJ{}gUzF3|{T}h6qVP_U!6wG^H8SOHbbqaSv=QRy-uE~;Svk2m_*s5_3Mt}$GQ&Dr z62C|t|J5%08jVPTKs}-8%yeT$*0nbmEiU99{1_tF3L8r(VnHrzP9R2FB z9Q!??Y`*rfhVtO>GXC>-bh7ZhHKc>vI9Kkdv>T<);=e^U~S9lfS zH_=F%>Tf^!$xY%!^Wf)cRP+1WKL&2pv$ObQ!-ChC6Wczph-G<_o`2n(-*b(VK;mX? zX%8CznL9c8vB2zYV6Ncq^f=wqo}etWCum*iWe-|q{XD#29k8J^0zA_@;IQWqU!qH1 z9;_9)L_YNbS@v1HS&yuNGx`P@J82L>xsY<#d7~=JXuU-xUa3Kj+z{R87mXH<|GT;jDxEPkQK7%a7p`P~nuE_8aaY9J$U5HI=zfhPQB`P9t8A=ac zye47`pMT{fz#>e*KZ;C59K?hyz2TGO&Zb`Q9GBapGo4-%uay?Y4t0i$5=JD zbTgu;h6TKn`%S#lO#Ua^=p;s++-c>&PGt{sCz!gog_FG{c(nyvmp!e&?xgR%(r1~V zwXdbM+sR&oS-Dz!p2R(vovROsb$R@}0s&yIfD5{0f_|M6P&K*z)_LdI3tbvA-jaZf zcyXI)5SlaGs6^KxW3q0ordBoGZE>PbSy$DfAOf{ODb#1dk)=pClb(y$^3q^iua=ep%4-LIU2BxYf^Zvrqgu`nBMwlV~s# zx^O_-V5N8f8=kKduAmdkYe>WESO^4={eCO>SHbTeyewesu(h=O#U=22$oN;+6BYY^ zvK7x@6;2)j0j~eK!Tqbrz62iJ9z%p=>a{@oQ)ugj*l8hu4gy43MSRL$ykhZ=ovs7$ z-NstSCt;u2H23BgMV0mL9Az@TJ9T~1!mhRwKs&^eOJ53CN1iAlO@1|1+B`bCscub&~o-_wl0yey{>!G+^*H@GhheoIkmZcwuEq)2k= z{d&6NVT$IC-WD)L>l19v5%%AGIRDeZe+QyHe>3<~&*;-!?8H0z#B|ct<}`#!N&Tk` z-Lw|8N(?_$cNihylDFxUOu#{;b+E)5f8X}5zw_efSWm{SMq`H~2Lsky2a9z{D|zT| zSu2GDkyq)Zxi@LpgrDFDnZpFaiD<7)$uTsjK!9O9+B1;ipH8SX7{@^45u%_-$m&4( z&gPtbGe#0`^7-V(O`7+3Mp3P?c(DqM&HV8T8|OcGz_Gu*OLj!(=W7)L5Mb(tet751 zdS~^pQ!7dW824vca|F+Aog~jmw;qv-)~^+de>$@NsvXK|9=re};t>b6K~P#gyDuol zx#+Y5)=sR%>4Qz2tDwI?>>;MmMMF#auJMNQ|ng5pKmNlZW7vH$7NxwC)$ikZ9k!A`74Jz(I$a^k4{pRzX%M@j0jD8bRQ^Dk6U+*Ez|pJgN} z!<#x^d~K+jBvm9uX1RBcazhKW(Z&7O`_lCI?6mmpiw=5I!}Jui<<)ewVG^naFt8(7 z6TDFy2%lckPI6u_-vHgr!3@S8^m(-hgBh4$pK|EHknnRJ@=upoLE+cq`=7qz|I_h) zKYf2YpMRX@!9buH=IrWW4YRWLGPid+k#_h!;P9`G&42nR79buQB7+CYrfM{k2I{+ zd_FRFMDrv8>1zpamF+xWsu+X+ulMX99ZsMDwTtZ+5aDFHrKJ88KA`9P7Ce524}M;P ze>#gs;BkZ-j!SH&fCPL>NV;})g`SoYP<5B*hI>No-nkef&45TO6xzxEu#-yZ%q=ewk5s+KT$ku$eLjD1Pv>@D zReC&)AjPL_1Qe>8bLgKbQ@XxC*K(0X$ELxqRQ24Pv(IX+W`5g~LvEsL z93y=+B)!)(0{AJ1rysyEeHbNZk9mI|1^u=X1Yn~0c4hgeOKS>NZ8T+Y3Bfa+GN91# zW~|v|p{qfO(i4YwubBFRq<54Ytrutxu^-$i(+US?QEGQmaC@C{AA8?hojWYy8Xtm^ z-o2^_lY&?!(IZ?A0PDa14T**+$cfM##34+IgalhDNngS5uFZ9iF-w^sOXW=#M|6gJ zq8`Ut#Bbfti|ylNuUmg_DaipY|29P>dsI2PBvypJkki9=Otj)iRZQ)VbN^e0bOND! zfDpQy24ZB{xEW28@T4|R5+Rq!r9^xHl@+cvbe@(jps$*{<^?bEp4P_W?9|ZX38CpO z<4@7g_=inUF|MntS-_cs)f{4k;LfjFTmN*`%t02C2O=(E553oiw)uqBb6dtD?6g?J)7_VIaoL`_n`a!wloDiItD$NMRecnnX~J9u!QBGX(; zWHu*uLOFVQVuU2k2wo}uV2B|5BhQF>_0)Xpw1ClYekGm@O`nA11IWzstZU^I8K1td ztF}sGE82WD*4s;WPgM=-7zplahkyU}TYxVbL4O9DA&K zK6VJ;i^jOMU_7oFi1<-Etg!+bI`6xOg1nCr7{2ftZ3mqY<;lrgR>^eK%Mac;HL*V# zqx{=T1|8GcI{!BLkOnyuPOj!w?A|UX|M{z-T#*%23Hxep_gg6$bwS==sD#Pddsti8 zdsuxVyCRqi2-Yw${=Xi zx|c|NqQ2QVEjZJI7pymtiLtjFjRstqb5qgQdSce%GeY}Et0<$>12iB2-1p+VJ!o68 zhIo$5EFP_7$%#F^^OFJ(_R@#;0 z0n%wVifU?u4u@XNk*{~&3h1IGu`W`NSx-t2Teq5zZ%kpwg8(?+i%Ea3X~%P>h<^tp zhpdfKQo1oX021Ee(9v7h?_b;9&%`8`_MgMQ?3dvEoFoclI8Q`J=~il?*2B&h_CSo+zH z%YXtTA2;9Px{zzWX;*y^*KgDO9H+8`Bka0eP!g$%{zCs{fp=d2+1I@os@irS70pzo()p#<^>7P1nOJS!^W3&GFIta{GJqjMfGHoz`Lz5P{Yc zsZBY$fCA>auYyc4_29D$=`YUG@4US4Bp8s&1yWzQU`o~})lGGCOGk4LD{yoD?v7_x z04ItLZ0U(psH<24{O{SK3rmObct{L!JKaLFme)jA=x4+3n;B^Nk;f;eh&(Jr zyx@E!ui7y%ZE=yJ{^5rd%cQWH4j}vR+2YV~yx#p~PG#ad zh7szmaOa@7HFgPQh8UE>NSrPVPIrt@?%-23JmJa!ZMZIaFW%W#&RGPC3 zOV_S|x@aour`a6WUc6ik=U6F=ZdWF`q>6bV{au<6Q{-<*o4sC8gzby(J0m@ z4*MZ4zK!gHNX(#KL`lmzu~wjgH7O@f&$r#ELxdYPGVOt?XAssj3(rq|wE|z6JAd-5 zPV_ejb7t#6Ix4_7FAP(UodwM1rXxA{7D}1Ga?+F3+)K-do0I6yk3UT0XLPr@h?$0P_|SBLwJ)-8EPB5@K->?8zuBxwZm-eA~1 z5X}g|_(b!(db^D%VrN+W!<6TJ-a7$HSqZbB?2JbmRJCkf{WQJWNzj?2qYN1KMr(P= zC-GdAJ24!k)DnmnUd!;CDC`ctdj6KI;(mF~0aGi{JFZ=k@>PM?0j~pHa9I02;XZ>a zf;xzt!dh)#-#cObY{n+d{W&Uk%&ldA2DRQYW3g?^l}ZMJ_lt7{N22o;5F%jty!xZD z+;BHKO!!ur612N)CqM6Q`L_+D06z zLrHlaB(yvwOi5}`V>bj;n;Qi{-;yudqWPehE)|{Y+<7N`ZeQ}4`ms8V;yLj+`N!A@1@-wdqT0rHbNq`w_ zEVBei517(7Y#SWjyLvg6keIZ^1?>nZzHiR)Gtk2T#rDu-Eo%1^ZGw^W(K7Er@}34G znj~?!_00u@9!xyECGYFV$mAukrXM{+99XmE*y(|N{vNGjZ~W#QKFjy3pR&;qs|bx)~M|X~hah`#YvdgW)33 zB`UqKMO^vwA(dTX~@a>Udh100Z7zgjHjpXn+Kr58wN9# zcx*0EBF|JwJ|mIwdOV||&@p)f!A%Q)TJbufyeIzPebs^_!GJCCx>YzhhUmNa3@V-) zH{=MrrR+$pKimwjyS)u#sGf{p3k$Jl#7!$Rd+iQ1>>Kd0k_&nzT3zW_aK!VF(u(-x zsMaAscUc6J+soB<@#8J_i*_6zZn)e{E*Z6ZEid-q7{_>FcsfS3vw+fCT%0ko>M>VT zs8j=Dp3M7Q?A`u*FhrmMmuli}-|#`Sn}+k3o+_BC3YacSg9(Z=1bbZQ`Y}w+{(wL) z!i0EHNAKR%0PD1^Sjouhx<{mM1vi>AL@*ralCndDqzWi}Hr5qty`OvM;7AwK zJf{XuXN92h2gvDE{no`AOxV4?08$&ETAKwjF-R0foPYhq-c?|3jiU{sbZuZ;BC1K` zqu?syP*#Y_fT7T0kQvd#By$KHLQ;3BE0e%Zqr&=4p4{d}%H?dQwdMdg7ez*h;HB#e zIVm|0Ub6VSoAQwzu?=La#l)?%$Z^;V1nsq01+U4#A3zaO2&A;mxnSO7nv&&)g~!W& zQ)`3ygCtDI@Ht{Pbkb`N$($8&6JNcb6PB-HXd)S3hu0CM0xoQ3O8E+Er}ahn;-s0u zDoRXmH!kFAUv#J<6Ed;MEb-fdFx##k&Ii^D~M75{h9uV?FWVJn7VDGnH>jpij0tEQwn1Jh+sK1@Td`i=Ut z7_dl+PN*092t4k2tmG(~mUe^q@oJwNML5EtiK_|>9(_dYbuOaf0V=n{UCxfV6q={ee0rsS zqu5V;|?{F&4syN}@|0(KH_9)sW!okNRMPl}8)_vxGBXtPWJ~#YLk8-M>}< zvkSTVQHSD`9!;05N<3!McjjMHGG3Es3;=|mtVc8uKxs58C@bqrug#yTsH*dTSJU5JEI2t>xHvdLfpCyp|0N)P z?_mV_LUOLIwocYxT1LM7Z(6D|jOfR1p5OoK*WV(0{6pwfarL)%ax(v+73J^zB6tx8 z4cB0#OF#Uglq*>Bva@$_1SwC>V8&^8l$GV568P$S?aFzs2|E!^ER!YX|N=NozYRb1RsP zr;WLth3nVV{cA(x{l(CJ>~;I{zrO?9Kkk&@?*txjCx9GU@Lwl;f;VZyYQJ#`Z8rPcD&8O2Yi4>Xb0TLc^|0X>L0MT^ATw64x4EsI?gl&DYW~C=Jw6YD{qRWW zWOg5^tW=-0oVQ*mVZl+-8nTWrHNvJ6i8E4u7;5|wh5;xFW5+A(VK1T+a10(hdua_` zNo2L@Ujyj+FPcmu=zQz+7X`vW?Sd&Ln7HE#5Rgw@xzaK$k+P}632S4`JcNy0b?aG} zvKHtN1aHXjG3cdpzT4W-vhQ+oZQjFCkZJQfle`zQ7VOt_vhql}XGX68}tVo&`=Pj_0}9Y!;J>~oN;u*mYqP=t8+IYv-9kw5cvxF|97W+2GqHp~vqaa$ViB3c5rZ5L=V`Erij~->DE~obda8bWqlbLph z_%-f)c11yIPfueWbGV*YpVMS8_xJ|e+enR^Owo(xxe;Wy2IROpOB7vbYG>|klBJg_Sv?XCsTT&< zOUA>4u8U$vlqCxq=NV4wvxl7>vJ)pG90R>ZCGG+M%3QRB^|I3(M}`W$!+eekNmfVjvo|^er0kjuce_ZEh)nOrTrAl z{5f$Q8qVYmJ3*jA5(FyDV&TnpGgUw7lv$bBExLPk9^QRJfVA}PI9=xisL)95WEY#@ zo;=3(H~nldJh*#2rOvSBQ6grnug(F(9qV-c%P#U(PdQH2(SGIg!dMSDX|Mv!%!$sqixpAKZ%ER~0G z`YERj8bf7T*8M&~l4-v8uh?z3xI9cfbM-j7qT;Z9hr|lSNAsFnTZDMtTmo5Y{zTln zWb{QyXF3gO^YDNq3Msi;uRTCnAYYlwH7}#sv|!tKZs1iucCl~r;hj$E&+uS-?n1MZ zfMhQjoykzg^5Z3*3e98Msi`HKy&-`u!*n3pRWZL@c1_graCKkk8M%V7S1GR%VSZZ! z*+``SBw3i3Dq^K!bA2g%Q#w4rJ^_7Eb*5=%h62!m!qTVL>}8-ImV9vuPO*PVdi?6j z+VcXWARw|zwlBEVasmK@0R?=5Y=uLN;|z@wL+&hBV2&7ll~p!*vk?Kq<$b?3m^HrM ztq1$v_W2?+`0NM6w%aLD4_es+`FxC@INo?rd|!o=yt^mOt#zZVBJ35S=Qx_JT@cy! z^3dqRzUJ-Qn=!@sj8GzI2>P`kA3TjKPIwe38=*Tq2<}PGSY*oYJ+GO;T1r3#u5u&3 z=ySM{=uO{Othdp$wT)bTjt-ygbnjLZfKI;hq$Hs4xj0S7Qp&sJ=c*mu2o3W@F7P24 zP*^Ak`k_1~VzHXVU+ZGeiP3RL*AjlRUA(3JMEN67ygTn>=pm|NfhSzvUCvv_FFdh# zj(o-=qkh-BIiFU~lY#0~&k9vg|D8qr4KPoCjh@KG=cknS7s2@)@cu7Jj_ZlvY5 zMAFrte1dg$J}^1&*efFnpNVDto$J>+C|Bw+K}{OOqyoz*o!BRQkd*%DJ;Yahbq2q( zMIHk+`k6CEOt?I7owT^@pvt4%WcKERDo(2*^xToemeTGNTA_2#N6IOmHHPG?abkGn zsokEx9RIfDzHK5-WjvcA^Fut&UCjshbFZqCWo?si`B47r*j67ZodRB1n+Lgz5Bb+j2UT78` zOuLGB)~zQ+!YoCb!>Wt*QS$iT^grc`dyd(3P=2}5j~~-yB>MT%A=MUJzT}z^2$aNn z(d--K+MpyUQ=<}?kTt+Gq_u;2G&*YZV8+C=W!RXNtmL2e_4~b+uU*;BsD6PxG0YLD zX0uNCBzot_ag{$jnVCmP($WR+?XmtcFLc5CxS04*X2y90i(+O+Y8~wyC0xA$X<91LyebzJY5Y+yPKE2+ z1kA<0n~zgyi`!*%=4AY`==H2|P4KOYJAI|Scbe#9t6*#@)N$vFn_N_I14GN1JiUyY zB*`vI-L{%j6B(c$>)b^cC5c`#6FL;c6*~{)4ssNaTt}i(^n@gr+~?!jeT;#TZtQQO ztlZEcr0$GyGkUh)xHwoLij?Q5nKMrFh0&$bK9#s|f;Qf`rI;N9xr;-`c9D}~{4VUa zmZUc!>i(4v81TxN0lScRaq-uic{8 zt-Il>=+*ZH6gf5QQ_-MuEsUwR`3hvdpQQ)s<3GMk`7P0AH4$ zEOXiqe!ITjpbR4t5jjW;DcSo>m3)nxNUA4nU;J=kU46k*R@t+H5<-LWo5c+tz|CbZyRK(&)y_ ztA_NKAjulJ#@fC1IGK z;Xx~VlGL#|nG1G8;~dpwnO9c8t{Mb=mn)0;(T##lw>Z)iAC|v0e8`?Zg`V!4e!(dR zmHJ|JouBqj#ia+k>9lQQ{SZmAmC75zFf%R!*g=cGr5Er9v@GKVLp_pisC0u@8D}+< z`WeOHf1~`riSm0Yh(MDvEhyuf1B%9c+DIAa2%95ZOMIPFNa2;r4V4NZSwn?$#y|;{ z5*Hfh3DZ^igps*MTt%HhWRd<+XtVXMT?Rv@iq=K1tivqxr*k4r30I%06V$7ArQW}s z=s6$52X$BrWP%oA+CSXaoEPGGnws1hPRzy_BDn_ZSQv}dbx{>3L!MOFiVp1=p#|7U z?osB-BI{(4bYI7h7WWRnlI=QCKg0 z|6_M-y=O#M*u7T012@re`TWq_%hw+!r#o9d(!#KQ+4x8=eZEp8pE-5M8*1oO_Y~(j z!>*I&E$>@K9##g~Ig;lSIc(}zM4zB?$1#$}=4oeIwoPr7?hy<+%V(nIxp!>M&RerP zp^e-ru)tt5qqYi=Hepwe)}^oy%iX>snQmNV+2n6!z$%a1m-AwlL+5FaS6Pp;-r9s?*kl2b%w7AQfJSIeDTa-4fx4L~86ezI89<=ej27UI$cu6Y| z0?__ff^EONym-5Kx>-9peM4Uvf1}p+TUqa3+HDCcd$xhB_{a=zc8(wH&WpPky4TXZ zyM=al_;)h&$(P_#?6bN`>rt^@d}5SDBCQr@Ua~ZqB*~m7@Iqs|;I5Q#N3%t#ir84= z;pQ4YN~t;vlk#OoG#^~FE6($Yjc|`>{!rFi8+=rrU+R5*Ctk>@E5o?hIM|gr*+JqD z?1TXXf^V!~U*${$+L^EGVX5b+G484?(9s5@^n(zAO;8@7o*WT=e@Ja)Jib#MD1mJs{g=NZrh z_BAtAHUEe!*@N{R!J05$ey;`Gt=3}|&<^i$u)069D;_rTRW{`AV&`&vr_CJ{Tp(U} z$UG)AM-;l~Hl}$PLed$^CX6J3k~Da!@u-2IL`1?dL(p6YK&}!wvxS5KqDa6##!0D2 znkbd&&d4zEIOEemcF{=DfK`MV-YfcZCe%#^qAFnh_(U+6zW-7C1l;CZ z!7^98bkg{bB~S{rmWgOP-{FE0>ag?9pcL3tn%Z$EC1 z5n}J4uvR88rAnaYRgMOutStv3Xpc+U0%r}D5wVZnxy113^$!FU%-Jxrt>r**T6pdpS6 zPVx>3D;FFJf$d1>>hzRyUhWfdlW_D?*x~={4k(l2em|M&RurXnMxife0v$Ro%+ za}9V|#9Lo3^Qmde$uuy~04`j5^hVlxiO5SPZ-s3mWA$#PE1#`I4osMF)hw`E%J-hy zU2V{GnKWM*w|s3b$Qpku`$R;rj?e7MD)Kqo!G*N=+h10o^c>o6-{vqcbR6&-ow6ym0JSkJ3 z5HHUv8teuLI_~5#UmTQm<4@a^z>ZL|!n80|U5whMyzV;5>FbIJ@_&WRjRI4L!5iD4 z-z|Ayu#M0P`!08??-mVSL=5E6X8QnZjj*M z;_dqbb>eia-+Lv0U0weA8+kq@Tj?E+J=xAbuJ z^z#HAB0axUxle!TdmH_aza-)01oN=BwF5~JpuCZ_$0cj4Uvwt-#UlWa7z$8Ki-fkZ ztX<2)(z%S)ESEaYj%cnxAHJs#2LuYE0YMVN@j2^+>9{w3t%5=ybyYvV;%bC`Y!D`- z@v`!k;#}Hz?%%d~YmWGVS!~|xp{@XTEgNHkO9FTAhX)5C*eJiJ%=nu@NBzT#my2e-;VEX4=&F48SM!Mc?K z%wBvX6a-8(q+v`F7uJED^lg0JY1YS+&sMe zzuG9EQ1)M*C`A^$~j{Uh$p#5 zRM0Jx$oCWh+bna~hP=o8PBFIEs}?O{bl&V_8EIM026Q-)92EDL4WmbhO`hL5ip12} zdp00Edh4x#Ui?#P36(DPu*Y*ulSUUEgf4r`c7`(Ra)oUga2_vs3x!LBFw+=wQYP@x}xq%=D?TwN?PsmCun6 z38#^$tw+=DDmv`a`e#>MD|x6+001Zeg+8DFVv(v>UQe_`A)jm3MIQChmRL%yb}c)P zJ}-M}|G?Tie#{tJszzzbH@memKzMC(tAd7g+1;Bj>Nzf`WcSQo*xC_$jlvY3`4J}rvxAz>2(4}u6Q6e zaq))hUNoP$*mgOEL3t1|4)NjY+-_CS9=??Gl?6IZ{`QhCk=;ZR z(R>VN2<16OfYBP-F=^LKLpCw3KAL-P@HRqjHT?WSLoTD}1l|8(?=8ck+}bwaVW=Uc z8yvckh5t?b*(GT>pU6qV%im>4>9)gEO(;Rq4RxaW`35vF?G^Kfe%qdX+eFp z;d5`$0qcESGgl-))1ms_Sv>d)jz(B{g!sMBVbtU>)~-AF`5Q3Y zlb6{C`^m|eju!hcbG*ep*AZS|V1dfjn(f-ERWEZ&7_MbE>TW!ie^Z>q(d*L5homK1 z9rK)M^!>AzO637$o@I8hPj z9Xv(`#usJ!5o*(j2)C78l~*P5-GJpMlXLpwKz>Ti4M5~D+%nsADE1DRAAbn^c0vEo zfaGKuFdhKZyO*tV)xMg3&0f+ z)_#pmzhk>^!yuS7zbhYcajs~)(vCm=cyqv#NhN||X#rC{(#UA$?i}S$emCJ}d)54E z-;+7g(_`AN$~u+h6o~Q99)?%0HCc|!fEs;Yw$-tv_!FS&pjw=7l_7d2`98-9B?;ri zWKg5ut{#=_RFAB_65Pi~l-+&=`6dYENezbiW2qQH1H@6VMt3dswKOgs3kS9#tbs;k z^)U=hV$w>D*TrJ1Bb#L6mY$vQqRL{|dyBX*V=e`uj7$+Pk+7<{UHjUsuL1VoNJaydd0Q7{b2hvBHp?;7N1Ins|xb< zJM+W`oEDlpvvNpTy}1MzLRhFr*cRumZIP3qzqEbmrejqSLf#n5?6-3R`f9#LQ=TJ4 z&3Dn&qsB?9Ob!~1$yjj=F(d*|(d}`=C&=3^$92uMhbTYY8?LM}9e7@`z!sgH znJ^Q@@fqGe-u9xhx@m)39w^l$^hIRO)@TXp*2N#(@Hm@o%{=Q1Yh6hzjc?(MA+~;9 z9MkxC2ISo1o#-C%mj`2KFjxgc(yyFU6odI#-?2$3FTI9SJNEcoXye7t zhoQ1?9NQ^IXu78fE%Axg(+>4cB&RN1w~5IbZ#ubFAkpn`k_>k5dV>DzGP@%@P|fIN zU&Kn|1?MfMlmw*t?j&6j)=gqaoRuz{u+KCk;N$SM2qlYt=QjLeH$3qv6Nv~T&uTxq z9yqaO8TP8|qfs5%fq$412FWjB3Lk1;&&gy0mxGFKo@jNrH zK+o-viOc>~kEe>W9usRd+LA)1@Khqk88^Z;iSXca4W9y1N$T5HKDZTW>ReMwG@Zho zeY$w(1w!{C^5DdvnPc@!mbeGTHy+U#E#06xdc!v0Bb%yOI7y~6dgc$?nN$c*nvT<{|Q_Vxo zIJYwf%3|8?HyKzfXpJ~#c8l@uvJM^xB(jf=$I$!U8PhWRiA*@0l*~&jwz1-h2|iKv z$fMS-o6ThwtAWhOob`NqRD*a>*Df}i|w0rvvH z31e}jhBU-X%bAY2etGOLKK+nC(;M3NLf7`a_3%I(5ab#sJ0^# zI7T(Iq$&EvEd`1pAG3;t3|WNO-R@i@3Yw?9a>QGXvA4#N<=$o%GhuYJ{RQF~a0i*d2NY#TxNa4Ae8h)~%#2oEBpkUNrbU?AZU8SeLd~L9EGa43rLM!e?oWq zo8p0}m=r=hv8rf3K8FkY>?{&EQZdh1wrd0Fdu!(qoz?*eH?`39{c^)Gv(ib=0Wc6r8R;XAD+ zdM_l)QQ(5_9)Yb$vU+-iDXDT~`?h-%EZ=E+!7=}B|9Z;{7m}IGzF*&i5mKIE)Ajk5 zFYBF7&hFrIpOJ_2J{jn$K~xF(sJ-?Dz?aYVnmgQnqW~q0IjIvG(O5OE-_?wOjJ=Yz zXyG_1r1N@n$&9mxF^QhrkM-gy3F_0{5@?Al4o{5685|8_ZXsMa__ar$uA*;mKK2Qr zes!flzUf+ZtFgk60$WA|of$LBn4F6j?A`)DlyF;UQ+0EL+_{@*bhy-ARdwKH{ljeKiYsiyf5+Wsid5d`bpfHKdPTMH;wjSN3x?;5MuR493JgBHtu)s(5R$^4bdojn z=7$IUMXKs*cdGb(yOR-d9`Ej)vFOfdozwy zT#B^s8mWxVTCU|^Ah89b!}hQrdvjUjF$}4c?c1{fe1gT4#zg1qWhYXMJp8r+IyLX#5l1XWr0TCtkH)O;Im?dakLw zay?df;TgVfAR%q_1nqHmV)=*1GJppqZ1*d|$gZ(}t`RFWj+QjpF`qmVAcq7tB9M$? zDxxe4B4_gwpB(hBzTXzZeb{p=4BvTcVTHM%(a6`U# zmsVsL&b%H5V4mZ7?~R{$RSU3Ij4lBWX6R;(S=8Nx=n=e zJGSK$d=yZ-epO7RMFZk;*R%EdoZ5+JT;l>I(~lk7IL-af@n7L52V)fcKGV+d9o*RCQac zU~qYS4N>nTWKX^UFD*@4QaNd6DSzH4DCHqGeg=QV6jJ@(G45Ap47Q3+_q>WHhLvg+ z(_T&Fyn~!)_T&y9Rr0|m556z)z@px=hb;U;06E)%c9U=mi`QymQ_-i8kLyEXkMf>e zDeosWT?#BfHXn2>U#&RbANwS!12>j9thm*2gcQ_Pi0KHkR|ZctU0gNBkFQXIZosRh z2m15troAFXcqPf4P{UOhREzm@ovafwj@AtnF)GE)XU?&=?c-3ffwZ6~OVWo<2lMl( z!cJ<*L&YFQ{ldqbPOv@qVWW*@zUP4IWvq_8kZwnuJKmyd81tYQYD4@m!%QXe&ML)} zL)SyDEi>7UAeLv;y^UB^um(G+_E{sAJ5DyWWx~`19`T+`=!= z9(%NjwArS@MDh7}6H~6-VhUT*($>gm_*`U%G%>Tbm}A6(*t+Sx8hq0B$~3Fw>4n4I z!f@Y#vut8z2cZLgGrAVEOv%bQagHW0Da$D9sj=`O_>?7vZ4WP4@YFaD@DmK~P9X)6 zV1Rj4^mfU_3)G2;eYTx<>s0%&?PJZ&Mj)R*9ujNahnIzW`jI^=%v#bL2RG{0sb^bG z*k8<1`z+uy=%~J#sjvRvfR`MuaveeQ-*Q0ur$kOA}JZ0C1YGN z2}KzLUKEQj$8Mnqsg2xarKz}luHQP%)96oS*KSe=lkA=$gF!4Aw^X7;7*=T-U7HxQ z4?cBCrr4oSw9AF4!XR;(5^#MljQ*`r2XgL1?3v0d6r@)_GsbCVP~)&g&54Oky9feJ zdjW`EzYUSMSecmUr@nG!{^CBd&pd@`kcZ;YI2OuocQvS(fK;O4bU5dA@>@7q3F(~u zS%5AeL~LJs>Xg5?)mrc2jwiXkpPj!OvOc{>1k;+}lzJD2Rd;4!1n?EN|> z+$e|xiNaucx{+UCSxlnr*HwZpnS2rNY74m?6O8;)%Li@6CREO3Z!!vi9WL__4R$*^ zj#8DhX)#_3nK!mzJajS7S9r_qiXnZ;i^m&7PpK+JrGlNOY6j;gR#(-1$_h8pJZw1U z7T*z_b5_18tw2LnK_aDK!|i3 zlFCbdZ+_%AMa|s7%Cro+9v+nI^ zF!D80v)=Z>Gao^3A;oyc(oKi=ne)}|*=A>#&Z^s=B))3Y@3TQ0U;}$HwYjxqzQ}cv ze8Nm)%fa~6^GDgYJJsJ&`?g|tT`Xk@%NbHY}Vcv3tEpeclSK`|qlNteQ_OWZH=lAqF_Eh9wHs<6;3?8Y1Iu zL$b5PDB3$u3bWX0PeYVd&`U`4$=C~@f})0Oxi)6F;{>k5uoW~O@&c7?Zix1onho3a z=04cHjJVW0XPxxM3kGYdvzx=atb$&5IMtaqYSc!0ZSg_18LpAB_bT7W94F~{_1;hW zTu0(A2=PePQ|AMiwTEg~g9Xi{9udduZ^*oOx6Yn5 zIfWRBOgnH4Sy~2EvT68A6_~nv&j<92>mIRQQ#ojrDq=hCa(T>su-Xo*k40%P*q#t# z$RFeGCmqy88U4kcc-+dDxYP4$N_{)5hJ$r`7}O39vBrZa=?QF8eKB6~r}WNzNuc;j z`7#?bwFPI59|ez$yT7yZ7_o_fq$y76Gc9YQEW-N!l_YpL%G@1Yzt+a2HO`BYEOmL4 zZWZ8}>*O!-d0$O$u!NDt2-)SnrMDdX0!(Je8}?DxYV!}`9q2?vEtp?kGej4W^52*g z6apkX2T_fSO~p0-N45KdEH%1c;yh*?@6T&{>eumPj5s>(nly~`%;35}kNv{9Vnq2c z-`NPSEkXd64OY(YK-pn$N~av`IAcZw#mU$u%Pm_5eGLspMo^B3KxuVws*jL=(7xw5 z)3ugiDy`1><;^hL~MxpnPN|c3St}%Y>5h5#HY>-MDBqQru|1N z_r=ZxHr-Q*%@ys|T1X}FizorYEvkDOdPhO785K{@WT!_tEyJ6t)0D}6`Q*x!QjYr! z)b}lx2n4bS@5PG|WwZyR zk?0@*Glv6~1`iCes4tM*4Z#RxC@Q?(;;AZ(bkDVfmDGm$tmyCC}+tx}oUx{aySmB#rP zK7ca?B`HNNlx=vf3(ZUB8=!1+Ecxd7;?fE2fbvdDGhYQNVzr!%?A9UggHNqYOeq}E z?~?Z`9qV;t3=BdeNAe^;m+O<>)aUeGf;06H7hMTFk?s|qg%7dWsn&SJw3OXm-|G}a zf?gYiI#3m?V<=C^p4GxWlj-=tUh?H>r-)qD4%j&uKEwm^vq{<|Q&_KTsBx3jYGSIe(89(B3F>b$gvh#?=)zHS; zCzmVekRL@3P_e4s3w$3&Kt!*0zLu6w@Fvsbwp2asgq=rc8rJj7s&~Avs_s87G0>5^ zc=UYcDU*x?mWhLuB}sKm?c=WMzRC(cje?_3ppFZMoL!}r?-CXETd{-s2~0NShVbc` zH_~eB)dN){>m`%zHj~ERax6P6$Q4lhK=QCEcoad(S&wsNTHVl8PkDAMUBT)gJ$-@c z)06dC=F~*~@K$od$e8B&3~6!3xF%OKzPLCM*Ul}Ls?pNEBU6?#14tMGo5{@WVi2uS zfcMsc)Y^+T-W@1u7^>n8WxsXlRAHrLZKFLe-;3h2>%)e{5~(%S3^G2kA5w^pNgm(t z4|R-el)KN~v|(RM%tKbG*%E+T0Wo*Sf*lNBgFTPX!@+|@OJS4AehKf-%*lV8Qd{$N z6!G7Q;2@BGT)?Hr4Yxac29#zwDtWSoE-WV;U2`+mOFbUeaO6#wi!y;Iv41NT6>)~N zz*C+RTn}6Y=uYzXNaN*srE%OsvG!l8e?Bi0*A~)en^;#mCD!nwOt&_1E@6#`tZ%s6GkKBhv z7}IUNKTdX#m}r=*5q4h%20=?jW~=(LEf~>3LmkYXJh?E&PtUUxxxEJnnW<4WX1l~G z$ek@!LL(93v3D!_uq!X;l^nF? zU&~ZKZ)e8i*RlGnV^+KM4#JSJzF#ao)A^HP;^I-c`{@SjDVvLR{T2(Mg^$D!XyF83 zBk#GX$I^BA;CWFRIN7vlt%L$>f=9=jC2U^Uv*#@t3B*r~pr%)dF>dZ=RIE%Rg-&dh za$c)w>`5%UhvRp4hsa$%fpcwun!!#FTVF@7)~at<@F6YL+=%~vI=hycINL8P5%Tnz zUXw9P5mkk6{iwzbLmX-u%RXk*Piz@m=$5cJI|k}b)5(>@hzQJ*2?Y!o`r_0@-1Il) z3hw9r?&KNf1e2+8bWHjlxPnn)0;8uzlJsHyhGJ)L9Jl3qe@rn$|26ayk==RU$F4Z( z5iQw`*iiHL^&Rnm%;|;3hsmxQ`(%x)tAPmKDiwVpq8s8!E%(pF4Jt-)ACQmu8ctoK zX75<_G&=HLlNcgSshEt0Gi+wJE2gM2zO4ijf%!5s9Q zR`o117Mr!N+n1DbzoR6kW5z{V|t}zk?nfT z5ka>447XkqhUdZkJ7IQsmx%PIssf2sd8mdiP3A~LqssTKGLlMv5;U6^MCQ6VO)`hJ z+Q@pUy<|fRx6JsbKhu?_m#6H^YB12v)n>=>)SZj92-$7(AA)1oeosOtZjY_w`u^)< z+wFrQNg*@~CTwtnI}j}TP*z&A>A1x+)f_SQbF-QkV%3I{a{Y)kA|i0HO+bB43sQZr z;~p|($qX|RS@Lxx(x{2+>id|n_GegMDgyO}8rvgazNhvbQ8lZF&)m5(dE@jAk&iZ8 zT@9BNd${yiCj#bWo149!g`F#XcJR%ICunD@;?e19!;3b9r~6luS@MsSeTpeYYC(?( zVW3cy019=gD`B%~Nb{y2fI`)Ze=d6wOR@unI^nSmg<6TY{QlvbQEfNAPE1Nk)zets z$r0{UU$IZ-RoU9Fcjn{iwvkZsQ%8rnhX4|4m1FfDLHe|T3K4TPQ~SM|RCHm9c*jXw zCkFae&2ui)`8EaVcS;Y)UpH96(LQf}r{5-j9?A>B`yK~XbF07fCpf4=k{QAX%)mQG z-_F3h&g~>@i|v7T^@)*Om)r+U<5sNlIr?pH8hVQkIbOV|^&p3|%O-x5#)8uiU*jzC z*Eupf1q|*6eN7My#yLU?&lELs94fs|@lNoKXsr^Y`PQX1Bb5i z*E&i=hLG}A=ZD5CZ7bJPH|b0IAQ>};7E*9RZ*#n&q=J3)kK#R|2qAT2awZvzPQ)fy zMZRxq)=rzjAd^s&COi+`-#V;5)H*riYVNzX@L9DvuiAN`*{PolvLg#`RGh0#Yy z{)9*#thb{R&@cVkbv`B$SA@L_(Cq*iCnZfLh8@OdWe)NKnjfsv%CSFs!EmEB-uq)< z0DzEzB}cDwy5?l3`QZmJk^&gSFg8S)4wN!(Caf!K9(LKnZCy#bWNIdi05fM)B`GZb3_JN7u5r#4Z>Vv@(e=Y_EcEX@@;`pg z$T0AKNQQ>l!d`BB&YJs&`opEefCX+C)E^{t3p%ohGmQOQKcMy#S7Bj$!KkAP^kWs6 zT5;98c^GokJEysI?$^C}ee$)k$*mx)9JzyPc`u+kzU>q}0ZoYpwSqxawbXU>c{)k* zo3f)mXU$^}+({&(P6-VVrWkki$8*^BTQV}ioq;w<%v%hgCFHbIfGCWSsJIQ=gNyuk z8wZ;E?Fo%o&9)2f3612+!H%wUfjapG`|qpkNmU7z3V8a1*`r6~06!-HX&N~aP1b*dkFv>g58%?}XI^rI~p!o&dFxK4B%Ymrt$14%@JCKe-f*JIi#E?zY*ofLAKB<;?KqPA22w zj}PPNu9mt`2AX6ZOsYz}N|){+ae>0C6keoAFWnjFoq`Nc`{gF}KMZ0qJX$cOfc?ov zZS(TM{&Mc)oCkeV`vkDmjyPoO&?sK(GB1!-spcF=p{RSOTqIqUa#Q&jpO;XPa2&5$ zQ=~`~ZfeAS1cAx4@D*-;1a>VD%itq_@ zbr`c>@}LJruIYk7r@2pl%U#{bM9Gg)DlWhbSQH*9=auK9a zY&m6qJof?m^;pn|n$m=RQwABErxopk_Y2jhG7m^o35@F2DMl`6F-LH_-E_6v*BM6u z2^6cWNteepwly8ZjcDOGN@iyIyh?Cq;D-r=JVEa!s<@O$HSxgLS}$gU?43h)u&?6xDUd-`jUt!T zZz4yZWi+SAO?nO=i4iPZSu58atSbySKW$BEn)NKDhBnJch!H~BCw!Xai?FP-MQx>{ zl1!nU5l*aTCx575ph)BlR@21?Z<0oz2))3m%JrWi>`rhtj;Ve-6!X}0HnvA*gn;AR z=(jof|KqsU-^KMm6LSGU0m>)fTip9YT>rn9z@?zTY?B%dK-W+vh{v|+h_jEEpAoJh zt>K5+FVLKW^?`0z0;0f5uXBmg{ar_6Lqn})^U~17P%IFKDnJ_6Y0bs0avW7Pi@+ON z$+CDv1&epwLep)zd&sG!d4*?u%iY3r_{w)x#eSc=0l4T+?)ImcxBe4I*VRE=tD0D$ zhD#_YzmBKzdCi^UQdVxWnHMXJc#il%vBM>4R}?O1`A@<%r)?i!!Lf>;Ww~|k-Fo3| zBM*4w!&Xjhm*TdBS*4vbIfbk|!HfKh(wNz79{*kd zpoI&CsQhXqTLcV=Y6W@$|L6n9WI850I@_28$6g)~u9{2Ne4EJrr#z5KB^Jc#R}=7< z2g1y~+wTmOZwsSsdKnWik1%cLXulCL`l%Ko#_k0je0)5Y|~6>1$w2|CF_1T@o;T zOzk29XM|0RRnNUNT3DDVRw{l7ql;GH`JiS`7wu#5p7rl33jgHL)E5P_vS0IHArVX_ zj4>L~?Kdl%iUl$L)v|~J#RGou3in3+#m~j;$^ia;!+k53{GVY<`u+2Kb0Ghe{q$c4 z@x6oijdJ2I9R!ft4nggCh`*(r_@7rdzbPmF#6xg4V&>3W_dVp$tLL`efVG5s&E9gE z5k&Yoxm5I=3lF*`w5^=@GP9F~Ndb!5h`Xrg&Ke^u3!bUwm%Blwj|C{7yOX zzvlh_?ScLuoqu}By^`mT6#2ib=K^9BNBiB-4+o+~N1|^(gitX33Rvs*!cb>yPp-xQ z;Z@TSw$GW#K`k8u-hV~EM+MxD5=kwv(%a%DSS**fmw_3)=- zR3E}qVG!S)g3yN;iL{(=Am>M=~aiky8)8r zJ63u~%?-Y@K@-!e^sw>?%6lLvQ?@K%JNMLCRODm zm$`>dcKf_Bv>WJuVWxll9W(t)P&b&;0ppL_1(4G`$I-(gREw`Tmt*nMsuZRJ?ft!; zmV`-rVNqcbuot5klxn!X#A$61AKs_@ta0R+HQLBsd?aJ^4CetEmC!M}N7Emhexxi; z7Q&O*=%k6$J0k8AQmq!HcwM%%gt%ao&$j@IuFIk=o)6cLS@OMJd6|-|3SQF?-%+2$3h9ul>l!1o*?3OunwL0> z-3{OFD>z{fkrD@Raz4mdq4|Q0_GH>)*^y~Z&qwuQpJ$k^@RVdc#>RcPh-DruS1X*r zBS!;eBcR;Z$B4(0IAlad$SJ=F^i(AVr%Nq}KR(I#q3yY==_tq8-AlFz@wHh~>s~W{ zl^t|XTMPTpOw0KD0(Y`Ew>ypo4iEIZ8CRK|6>&}5P%UviWX+C!)AHqA9zB}GY689N zKpUm(t%^y(GqNFCBF2YMufrbeSEei;v3XGcu8*j~@icE=-Z2j__*wU9j*fKRsovjX zD=x#|Rk_9zF1(gPVbU@7bWji}6uYNHG z3d0*v>4iLqRCGAKNTz6iy~<9U3_A2wdSO7Ntx59XqhOJm_gJ<){VZZ-=RSr?NbXNA zc_f>5(OR<&F(r>qB|g`-f?e!em?kq965z0W#68FUXO68Y|gReCh4rt%E zEGi$xHEb$u2`dh!|AIxq0cM1AV#aR62ip~%5y<=askg0Q2E#2wAMf{1_gjMwK6+Fs zhkFwJ&StFvj~dd-A2;uOVUC>C+4VHra|VSLx}Zyy@fTIFv&f`e*IgXx_?KykW;SsL zh}Nky_HlDdNG#OCakp~-q$(8B_ls`fFRBX8XcWp7NGg5HuPDD4iT&TpuQEV>MS;RWh89(kuoWkah$u)d0`d-!|pZMiXxB>d#a+AVI7|JEqeNR`tNpz|C=2AZx-KYSDl0Wu%75%ki1S~lFaaVF*zh*DDpMh$Mwp&BT+ z*Svk}J<-=v$JeDL3I}_W%TCl@R+~RD8(ur|D33UXoF@hATr=cG*&W&+Y53B-K=B}s z1~WVXfDd=LuC0yldj+9uHR1PCj^w}|vTMbPM-;?jY@6_?^(+X;NDv!NrnOFoaC?Q!qA@Ss zTaFWeby5Kr`^NpPdpI5?WysIV3OeFYrAfGxa(v9v$Akr53TdUlRC;m zmOEQ)Sl_%}xaP^3(%_v58@2C>kUt_V^g%uK_ZSOnlKGr)ccLBY%HP}AZf*9TkFNN8 z&+&hxA^Z0p<{yuk(ByLap z8o>r8xyz+fr#YAVDCS*K;{q{Rymx8E30^YNf%RDW_Ryz&sy}o^KIZM!h4+{=ev(k@ zivqIEzt)BSIuY~x+L7q)8S(#@QZJ~MZyyE!E%p8{HMjnwXzn+?pkM8GA17xQj0C_} z_}|~^1^wqc{#!3-JDh9NVb?}>X0(A^<%|prULhL63~;OoA_bnNpbc8PovYNAh@t~b zog7e|+T-=c{6=r=H??fZX-;=X>d|B-Ndyqa^ooRQ(glZk=%g@Q+G5!|wZ9MO{;*rY zp5M0aJx1%laNYgaC;ThHx5%zf7)=ETogt?E`ijMnc6+m)3_}lM;rKdoXO;B~==*3g zHKmT^2nFmBN8}a!M8}+%Vsde6s#|pNZEDui_)D+ML&fY{l+#juZi?J8Z{w!(g{3=H z8H8q~eN?xW?}$qrZmWU#64b`EXPe!JO|{=HKbIdBSRGzl4Fq~1N2_qUQT>zIv0v%d z?d%=vufJKnv|i1U3N;#Y~9o+JCP!kPbh zqW0}9*Tg-Yswt}ZL?h`9U}}jui9=ASppcEVCeTXq5Wd~RNwVmad(t;I|>x z9CNe0Vq6AB6i+fO78{%O)h>UqGQ$jl9{|NYK}hKR&hF@98ND!-9B;B#7THd^A^qZ) z9m7Si-kARG)9}TJh#_9A`pS2jWsHr~SXk;ep)OYW?=8sPTqeoiESs;$PRTYK$q1Gh zz0Q30?$h-fmnGkHj0wM^P%C5XznGF^r*&Z{RndF?iAIh_y)tD>ptz52v$NBS)^kSh zB(9Q9M)WB9IKnV08>&&1k6BQ+Zr{MC&AAGrKHHp=eprjUM_4m#z>4UdC%J~+#yUw5 z5gTM)w!*#i3YXS7B5AmU{L#asq_FYa3-J))!jpK><$|!elWZ~9`0#Y;_Vo_Gm>mfk zFR*LUg5mhMs#JvF}UO5Kj&q2$m@J z9pYz4DRyUFu&_7@AvCm#JGydDtZF}0OkZdvYs`K!R4^>m(Cl=boab1FFuaRW0U{2O zfT(L_EvDVe`ZOInwtBhHx_H81v`sl!$I2MTs&pg{wIY}nuFHMrL=7zi9U|n~{Sp-LismFna*6ftqJ^3dA^BtN} zvUer?5W^Ggp#}uBkSz~7{j}qG%wmGarkWUwk&V1jv2}b2Hrl+%(}4<}&tX@VnmatC z9ADwzPrcVLOVp3frnC{DjoD2qe*=aBdHzo`d|&UqlFkocs2_(Mc7T_qGh_gG$xEDg z;ngZ3TPxOJmqOao$rqcjufWT*JHSh>ZQ!MrWK!uQ+r-q&Y!j+@?CGc?M}EUciU)14 zJj*7un$^iAHfVbdYI97^2vWs}@nR3QO_1E~y9N8@kOQh8)R^$7=ztPE%>8kLN-dH3 zrbgkywD|`Yq8J?K6uisp@wURF>KVh_+d_eHO!#NJuceOry%@{ zPWe2p<9bZ@11$?Dl4nc&-_;W+^LNWW7!o3HxT8IWfyjCLD6s}g6H&Mnw5NILCpa00 zsx3oUIo5m*3#X(JKfPLw^=M1;ppivfIoe9=g5#0c7kl{vE29V~4HICYFlj zS;cgf7Gwj0+jW&g;HGgfu^p{%ebC4(!y%)I=q6d`py0<(EMM=3;xYP`FGoVkg|Rh>0M#?&hnn+bc0XV2>!*u{Jt*()(%%84rv-6s0(i8DM z=Exh4a9)|E)+`}$SD7Ofri{aD7`h~IPpmSx*nhusJJ);I%lCZE3_%N5oX8Z9-P;^_ zpi-|LNhY06k7Kt*`KTv=3=2|kFTYcGfdc}Nzp6_FxB{XBf0TCs%G(jOBl`TCr{AMv z{Ql{UG1qYPaYA886VND66j*jAc%Ziv3Jni%MZrNC3~Unc$F^YKA8%r_u?yDy{w7~9 z60`$L^9M43qC%1aaK%8EK%fO7BC#!sAua%Jh{mv7f!|9Ai3q^eP!8xodvpjKv~z)M z2lyL%G-`Vhbp3vIo4>Sy!6ik7g(U?sABL-YqP)G~hG0R#*AUc4xuX4jymuCO_p%nT zz#4HW=}zh8MtR4p+OtX+g!QI|i(8>>BtcpDU~E|4fg8SYM5b<4S4M6S)hA)1a%1*H&3 zb6^2jSZPx1vZ4N;Z1GRH#=Y(S{X*>!H11iO{|-C0<3To2wgd9YKK@>Sr_&f67-0XW z`&-WaY=!=62*N@@lSM1gGXxHn7c3SKNZGRjQ6UMqAY9Kez{dfYrQ@LU?Vp#A8$c@HxwF;f-BoQxuF7sw-@?% z7uy?6`SD_^Xg5c=kr3E%A>gV`f4mMG`Om+Ux|=6p(}bJ&c!DNOz@O|+mG@^hf$`!; z+yX!g0Jt<~a3!B3ZosSAJ2|;wM25f@_u2lHlN*>dw0HADq5tUYfA>nvtU=kopN#r6 zJ>}9PY;g_!zR%87dTrtZ)Y@kbd(o3 zHiUMzJD13}7k@zB*cAoV9-IZh>js(-*n_{TLgML{7;DrD5)1bmer zE@*L5;3i)_uXZP+&seasdE$ykcn7Dd-hi!~uaBs>2418JDfMYZ96h!$=MS=% zSmh5im-65`Q!2sYjx{rc>Yc-TXG!?jn))s>jaiI<4=EK98{gpOM5RQEKbyGY#eerj zEJ3Ho0d#uOc}c2FRLD>yLImBwpsVj z_RGKeX<;D*#!cIMZy(1Z2!!~m;;(6M_1s%cfI)TnX0Mzvm5;Aq<1a|{*U;# zymTTIb4njN2>sFoPU$9rqKEZY>Y-c^Fe}3|C^%-&|kXW)v{C4i=lLqRo0#LwFJjMn<_a?dOXREp{uC5%@)oLkz40J+)azu zA;f1dJ!l$L;}CE+GQWj;^&aVqgi4Mlp6k`Ar)>%^4y?~lT!E@a!ufE{`G1VS2b>xI zxtnHM+zn-aTwG%xFSw4q_f9DEJL}-p{I;`y@C!c;h5op?IeCA6HB*d(_JRl5d&7+! zUG3dG{^X;79=-k5=A;pr(7+o72bKXWY&R|d#<*>7AY?#b%yQS#5W~CQ@B5JEFO~*A zi}@T}(c1|PqFuO(o2LtE$F*62@TyFel0F>);=kciB+;_e7g5dnql`g~YC<0lnPK5Y zL2%U3I{{$O4gZ@?%dy1A-77%=nCpo?TrNSHiH%{@L08DooTy1%W7032pC)3i+c^{pyPt*?Ym20{vZqBKjY%@v8^~Y4744 z=nvQM@$_;*qrCrkonJkWIvV8yH}pYy`Z)Xl@gl!EkuaOq*xuXw>x=zOqNX4DGmrV# z?E%szr2Y0L06*<*4r$<^(?(N716g_+<;rYriOs0qCk)umYJ+}-<%y3x z*3oZ}0>^`;PuyX`)@q<~ERyb1Pe!qqI!FZYU$;o&mAZJnIDrR7qk*ER5_9%dD<<37 zRC}j7uAaseTWJO*+j7Mdsf|W%tXcxRHJ;bYfd{mZj;XTnd`{#2=5m7fGirjB6i#HZ zt>4wbD^lLM%5PTUcfR#k;p$J^%I_}oE8A7E2lRyCObq}cOn^=Pk7oBP=lqvN{Nt5= zwF~s^13fVg-pkGDk5M>X_c!GM zat3iMD2wbWXkbEG|3F_~Pd8BB*kO89G=ggy?fm#POk^e4JwZSX409=EAMXIPn?oR2 z1s71R2ypd5?|1+sFA(9Y0$>lnCnVyG&g~-3CoKra80*#mPi73}tM6FCn0eaTCDVX; zr{lcZEevV`h5Q0xD+KFGCRC7DyiSUaX@4z8N1NDemyLz0r&bN0az=FMzc3+aDeO2!0#HrdCznLcL=2m=*>3slqt4+860g2d` zrFni_IK;;0kSCr|>`$V1uF7w|`&8ebi_UHV-auh?n?2dyI|S|i-SV-?MD=}#A4`FOC%Mt`P-J3M9;HIWz5;#!xq*4^aF zF|*at>z-jb^xTzud?kH~92$3?G~y+X*)lVTp#(||+nRT@;Ech$QNq0OM3P_*d$tR7 z*{vs*vw8KfN8}6fITF&amAbFCDB9*8e;VU<+4b=>iFPO2dr>*9(Fvbjwx*NHG`2r6 zio;$H8y!eyM}J>o=iQiM09u%(K}s)R2H za&c63(8ybqp!`*xC-Cbgo|i9kDn{Ghc)1!M1^3f~w)cq74&;J-Egtu4Y4bOJ1p^B+ z1b0p6#aoc#6d2B21!7V8kzUF+m%ccRQ9^?`o*GXa*f8dElr}eXG%zcTGpI%lo3D^s zpSY&6At<|)C1wv%pu3N-(!)V7Qh{7SX+do#Suz9f9#g7KAI5oDnSEHmb*(V4S$0|g zaiybci~?%rDZFXX%Db{pE-~lDuxMbU#@ZQ__sdD;L#}!)ZC1h6$;)YE(qx5L!ZI){ zzLc*Pv^P!oy#;;EnfKCZAWRE(i{o}i{m1+nGs3c|LQWUaMgqys=eZc!EOP8^3{{QP zVGmkg4V}ZdM_;@bm%Ewmb2-??dPF_=V;0d(cQ-+W5)y$)JqRs3FD&vb>oF7QH|wg< zowfYU3pW67rMZs`b2FGmeq!OJcZp}$>6yAnv2S+KQy5X#Tt6KGH*=RLEWhxucd?0m ztG|Zd+<37BtEi zBjO7Rw@z>nfjXct?gf*w`2dMuH*b4SxIf6Y|3*#M0Bnjf@LcJKabb1Yd|HN{2?aiF z#QRSQl&SfB8Kh1vHgzwz4V)48SFEo|oA-W4~aM9(zPn%ms^l1p}9=W4>q{VHA|Wj7RWNjueuKuUX(>=s(83B=ah zCw1;eGY8wQyvl=FTF^n$97hD=&cbqMiN5+*LtrXwxB#fz4Qvj_7ANSE>(PE~h}V-i zJrO%+oQpPcTz13f&BvueK3AV~N4g%Jy0u*Xn%szgpHKA4!l8lm*_*6PSxTM@mN+{m z_w(cybI$l+PVSvW#hgdZZl0LJ6WR+DQb2I*=;H-yOpb0~r2#XsQ=ntOZl&V8lk*2H z2u!Vi`{XnQwIy^vC?&?@?GrszD4M~Kv>w3hh(v$pnAtqEtTuf>_a zh*SE+6dad8R4F(Xop|k|(k3r0iBea(3)aVHFmXRXnEo%P@%Q`N-WOOY_>RCz|G03! z*?YdY7|IZ8`gAE07{?*Ozz$~$(;h()_UXPxJ6xV#;*VP{#g_~{e3W@{!WbJ>Eq%9=KsBzPzc9YQL^tZjxkaHub~n6-VXL?Ax!57yg7GY7dVf! zbg-BRFAyH#L2Umdgafgp$L5*)kc|^PF8ZhEQNa4y^XTj}mq2KyXQT;N1_a%1&Y1X2 z&ld%13EM6Z{NWq`3X!{k$#;sJ2jqYKDR9Z17RBCregCYEJGTM@k)Zku_rfrQgBOQ+ zvEScX(;HNW!9NN5b8~I)Ykhy4U)NbgGj`qR_y67n)1pHA!hw^(6z}|ncDyR^8!jjz zZ`4lMy_Ye3|IvT#mBF`HWKW3;gmHhxaTYVh&)KGyq9TI7%e^m>5y#1a2S;V zxh=ggUQ4>x1*mctZFY>KrE}bDlnG@?Qi1moQWafIMLr9S4P^@|Et=kEq?ng1q|Ohef`AdWVj1mr(&hfHt;g zPTE1q@2&K2zw`E&{Zqg1pO2;AO9_ASwECj|4|{JNRb|@te_xxu*>rch>FyS!L0Yv`6?|6wf`xc7CPah%6_ z#OM1Jw)uaisQ91E-v9cd`V&W!@ZV9g1TDoCH?S@6YkLe5557Z975>?s?l)C7xT=cb z3bdCKj}(s?;qMl4(cw4Gs%$`%=+Y3={T+goK*tmK0f-Xak8Bi^(@lMXO`Nx$s6>$^ z){?$nlHSO={&G+@CHGi;oo_?eU^IrcnKx~X4_+i0uKtJ^y_=#a`01ie|6K3eKd-X+ zi}HA|-RJ9O|Bg-hqgnkYGyi{PIseV=`QLijzalyPkLqFnXZsK=cKaLq5Uyy!PXAH* z4h=lWlZEtawHvq(Z>=Rgc{M0~U*M#GHLWsdAJybCE!%GMb>x`!32AU2DrKxUrF(N$ zRG=go2fmVtdzfG(mz8F$hNttA464Z-u3Z3Dy9qIa)o!ElwNcN()A~=4zWReXFuT6&Z zw0++D75OHat^@A38Va58;zPJpu*5hj)G!y{Q6r%O_7rlk5fwaXE(cV}$NFQbguqvA z*Y9cOA6(?VU$uXeca~u}$v6w2)M@e|WX)adt(`!IC0JHs?qT&MA@%+K4n{IgSihR~ zpd79znCJroB|cz;@_*!pn=J#XXh66oKh=p$Y$_XVtyU_zhrg%Rl#AIK$MC+r&JA@2 zNj!G2m4*$lpAEcg$&o?#@o_<#XLeIR$%BJpK5?Q9ym>xmVfwi{<}E$=GIZ9mT*gdD z$}}r!hARQ+8b(iPhPU6}733dslCZxo&_|}lg)h*2E-Gp!Ts-A%A{P=oC#|!)6}dwgz^}usla|9oO=U5qc+8+TgbykRbNcVamfe^LL@|1ujoUIh@mkr=;=Y$KdPDdGISXd9 zKDwH~sA(8>iy#sV&^YO%QF%vS_%-14{ty{h8)c>CcAf$nN(~|en-vqNvL-7PKA=W% zC=VC=sZX@LJWom*4#BbOL#D{A1PR27&*xHkdd8a5>9cNp9IJQ}qvqYaV?5Y0qlN#V z*t}rkNnrOF!z_q9=3X9G8ByZDK|j)$D)!t+#sE zp@p5whI0GU_Vc~?qFiW(nG{oFF@b)hThHH_5BIW(;Y^Ql9rAIMHD6xsxGHy@n^c$* zmogd)fGLAbIXBX?GdSEjO@0}~w^V4k$GUh`ho1^JD*jLl{?|6~r8HU{q4jeTZ%qj0R3!I($LtujMeLuy8|{`2k6R{$0{?Q9sDeky$>u;|m7Pj7 zOMH`;z@HXcoB5Fc=z7qWfI|8P-Dw0=*bgMX-tg|=+}~r{ORbFGN6z4vm7mZ4klrGT<-K0z8T2)n^KY4b(Bku) zmFNGb%)Z$!a19M$oCMn<6&Jy_NIU_&ilnJzS(6z&_I%0ffQ*K~Rb0UuR8G*Aa{|}a z6B@1J-&~1txwY3I*CFh}mHo18Aa-y$xZ4esGp8fP}sP>dp9Nv{c_Q?T7cRCuN6=ZC@;9 zp05xIL1qz=*(^jZR1#-RSAOYT$9OGX)yX4u-#)YuUyChTJ$s4{gQi~U=7B>V>Wq@f zwdD{j(aTBMZ!04n?ncOK9md2VORc%7tA%wba)i^R!#ZBzfm$=nLccTo(T>5qX9C@( zpgCL%#Rp~BC}l&9HCUP6h|fGy7qDBhi3+}{OpJ`X5@}ZoJ#2jRpIdHxOwxl}CU zD7so?&!=G1K%ox35_-fii4!||b&7cQc$aFQ~ zCm&Nutq1371mMyP`@hG#ncB6;dQo~B^pI4{HD<)GuAjd#mO-GW%jUWGz;98jZ+23` zn*zvkUDqv9+s>}Zy6Bz2lY^@i1<8LCjBm_)aqqokAELthLJ9_~R?W0d%=*|f0bomm z0w`G$xwsd{u?A zJypn!zP2BgHZwX=>c-U=co-1L;Il+;w;Q1NE9(cA9`%p0uN@rv0?VqC83LbTEeYi6 zW5SWbpdmeiw~9OZJ(h^YoJJanzK z=eWpQi!P>Znd)}O6W|DA%QL0YT2-MrKhB;yfQupfhfjQ z0On6|b~Yb^uzu5ip4JEjJo-r~%$x}pGuNE8d<51Se+4MD-6{lXblJehdxg#>2#X;- z){}RcSBO6hEzL&ERKHx`p|;1}dzGEIKRMN!cdhK0-;|262#JoH*^}Gs0qyGgGfn!< zadliSnoy!qxX9K2F_O(9c2QdqEUT#{j`SnW)58{L|{Uuxh zwiTb&XrKJF2PNmtZN05M{t$`yIjIA8(B$uvI`TXJOX@f!b?gwL+OxkC&*l41kU9u4 z|AN$k_=`9;xIRwp#jgO-DbNE9L@WY91O zkb=4}F)k$`PFOf;wKzGVZI;OFef)p zS0^9qZ-(o49KU;Ch16gFd|RvHwj8SLjhV?^f8_C(1V3f>GlO}bRBC+-e-uO zaDA%zd}DG(wjH)0lnBmg5t1x1)(lIN5ppoS;)%w2&Rsd~p=N_pIf=2xa`75p#C3Ic z78OSXx+^|26>m!rrw>7g+Y5^Fl=t7}KD)EPIE!#*7}({UTM}?MU}= z9@eQerRG`jm}6*T!9piM`Xw%hP}2C>>A>@^hXaV4;6^CB+F9Ep3|u|!?5)iIcqD89 z)*zT1AB<9ffqf9(v;Y=3fo<};b>u;)(Ecf34H8E{AD5N`VEH+`DXd$)hMN-Mp%mn3 z9~iQYyf6E=$xYkx?wo}T>G&KTmI)Ni=Mxzc_r_(NsYbJsD#_;W-PzR+9Ick&4>B8H zBt-fWqWDT~BKQ%x3FnO5#K%huEdD1$6fNIF6s3pYr7DVo+{}?8Ylogm@v1?C@lbs9 zxz0Ixb<6`idQ6YckU;>?OjMpNM!3AA&i3(s)BaxFVJ1$GtN#P5n5y@oQ3eXHeLH4Y zW>mL~$?H7J11Cfa_NSXQtsLhH)-4`V>ClRxM)U*?+n;cobhqJx_%Prl4;XJA`Oa+u zAXMl8d{&Z%`_dxtW^Thah&RvPmBx(a@TNeL$uiOnPxU;hy>0-iBXMfwFDhyMf!oCA zE32(?!fgus&TS$fg<(RwUXBAaD{d{m>c#~t=BvJxuz*TXkZIwDF-8s@VKGEch(=}Fqv>~gdSN$g5nam{}1*FWwvB@)CqZviD=g5}}cS{az zZlrE*MB6BL&^hh!yPoqt@A9}PEBjey%PlKg9ZXAa{Bprgn0t=Gh_(iXYrt3 z{BH5Y!L@`tb0km*JW>2Opa#lZASlSGUR`ofk$SAqRQFA{Qgr@rRh<6DuRKeG ziJZhkh0f}C3G=`8(Q%1OgDxgm?0wRPck1N-8TH}sWyjn$!Il^}5h>VfR!+MoSEu+U z>a%VqzZl=uwR&?#Oo$pPUfRQXgM(o4DKU>$-l~{fc4YUEPkip?9eRGC`Xy1t`*CgO zK>~Q_Ag`Vg0%p1!OEFQ7XNL1c@*A|mED>l&0TM5lyFxafo3ClljEl^c$fk*s$iNQBv{*LkIn?6T zR!R14Hrnactob*Pal)BhXO)rao+96MzfEUQr5&*);LUG(Mx86;doNIpx!i0DLxo>m zgmm(FcarH8?Ac`L8XxR`tWnLe7L*XUXp`t!BEBGNZk9j>7sIr$YY4D|ImuE2QEaWh zCC@b;swP?C@M>$=qY7UQPB3ASephL+61uahuUlJ#%Fr7mWK7%8#vDo&9aI$ZfHJ5- zN!Vx-?R1X*H^o%n9v}nVaX(3t;T|yCnUIpALjN>L)}Te@eqN8a>M%Lf-9EkaO>=II z=iuSxYkaXn`~>y*qjYGVwWpGx21wM3nJ8D@R2`}9@tD50(cN*1ZvY+JNSbc*m!T|p zsq;qE?=y85on36KNzW0Zdv zM!0QZGrqLUZ_#?NHjwtAhx{yz05D&siMGFTOEcbC!0=G{<5Y{9_rs<-p+VmB1*HiG zTZC0x2U+3|?)b+awa)cd`Px5bkBbT@d)uZLp>NTz8j|`HOg}y1!swWL=K#t|T=aRf}j?<9^OaS}&>)g+S2b=T?`JgSi1Ml6a2XjhD!t^r-}GOj6$ zOOjv!k#&53&8oCv7PWg4nbmZMi96gR6r+CQ}5FzmA(dy415HAu^dxgR;+ zNKp~r;5(+Od`dyOF*-t4fZ%FgP1KBSI;lq+$WvffAmid zPO>QST7n>4vK+W0I$vtf$F8`peDsKPrMVvI;)83Pl@J8I2N#$R=LD2R#~R3C2ssJdAFv@^NLPAdU&4zz=kNyF~5f~`h+hjES}x?-g@>$1EV;3jRBVcyCf@cQ;{VE z@6P*>`UgFmJ4{YQMz$C0Y6Nmkh4IGHP|a$lH^h;l3#zzfnP z-MZ|7b2%F`L}>Ce>WQQN%biiYMKndy6B2vTr*~F2@+wE=W6j)JTa*39UHdtQ(TLUR z3+Kw^^x8bolN4TF$+3^}zDbtmy&GFrUHTFCXjfFgO~Bz1j@gZm6SN}e@V?-dK5e&o zFywK5g&Yl(WB3=kB=QMeQV^s|BJdUg2-DIIDj~(g)Ypa{j3;-|>o806QejlIASB?+ zT~x7tHEucS+6i3Jm#^YHl?2BV&Q*<@?ldn#S*TLe=$h&~;)|oVdsc>1NX8(dOf^EIZp*lU`M_RfmKYR#*f&zx;|OYEbodH%qF@j?so@ zG&l4vaq81+jswHcPq4H={bgxaLK2U=@dFf=h84?7iY}>gZRHt8d)oeN=U4Qq{X%rD zO6@!f$|^2h?Qg>18y5KtAw?%d1+Su`-sz{B!E%cupK8wBlygoycFUjaLAa!X5XEBw z4H1uQjl%*Db`s#&kyN8Nf>hWJhRHDKLNC~*1rsuw#&0jzBv;-Gnp?uV+Gp)O>+)b5 zr-P#1w3Z}#lbNZ_mlJiG_^kQudwTOnLK4D)v}c5sKVl|T?JYfAPmsz8U3*V&u;WjL zjSb}FoSFtThVQI;PdD&%_xf!iA}_5t4>#!QAT+&Qyg(?`mtJ;zYtOGGgx80 zDq@zyQSA0@c?MtcSC+BWTa}5!*kVj6N`0opTpcuQGv>{ zJJsR?a)Jdjk|BB>S(C6cb&Q{1tH6d2RYe)iOInxYwGk&j^rST9zOon*+H#tzT7NKG z2;JJB*~H&{q^_ctj+Dxm*#IwWnmTIQAoCIY25C(xO+`5^gr1_d0zykpQy1hvp1EAV zsY3c!u7SFgj531f4^L#K1T?|{iyN%e>W-E`;m$3|4BDywgZp>oZ2X@#e)xFkcrQv$ zdItkEU9jjabO8Z9wUJ1HT)w%RPxFVzh(6lWZ;YVw^sZ=#$GSf*vStywh{=>(cvyD3 z`Y?H=_ikNK;BX>?qQUH~ykG2k$=L4($K_s(#kp4HEzHvy(Uj6cPwh*ftdw7=a!Uj(rh_K;$yYQS$9WLa>7dkK;KuYw*{85nQjYU-c zbz1Yvj~SGcx+axK&QME#Z~fFPWrP9;eSYs**QNN&uWqgr*y)P^%j?eDTV0?%`3E1L zAin@NA3u-4m(Ah%o8_&-0|w1bs_@Q6_Isz=$^YcA_p)|A`|a7UmBEc-^(C_KFUli4 zC(&7NH!HAD)sy}7V(>4Y00VgVUW9aMu6q%kZRNlCu1j*?#T9?_U8hZzrvSB|eP8hH ztsPe5(_Q`--)9yFR%XCXx{{GDrN+qJ7dlT*wKv7?TOlQ|!*xrf=^F8IYr}5NK|O3U zbtE{@UA3*%BqQ;N?0ytGKcQ?$yiDp2SB=91{Z2iw)0RgTB?x8r?|rdF7!vU2CxiN> zj~PUadia3+&$Cd?ZwB{tf{+2>;(o6l4EXKLZ^X86RZ!bP{#3ZA^T;;Uc+<)S-#SEL zGQ+_Ug_lec4oX`@u5cS#R1O@n%;|@j#%681?4=LUi&Sg25j~o`mp;>lyh{`4(T>q7 zfMY>;!TK>)c+jpcp!I7eR!-+R2n@JJI-?!FZ$sXARyl=;^@akW$Y+Suf0;9I(@Ps5 zbhH$~Hf(JLxo@U~9bs@u2O%XRBd4ydC3j{}I1!5SvX>Ab2v(I{M@tU$i%#DW1%OgK zAQ)>=bkoocxQw0y|9U7m9fGulFak0+3?kq9os{H~lsT!2U)FGs(O`8gH`8iVp81R6b ztrQV4CDr)FQ2um}iSYAr^YHQt{cw+gPT=3(W8YCsKgxmdoH&%H%lYShkziMaqMDYr zl!}U!w&Eo};8L=E4a2WH<_)ukov>05nOrTyr4BIR@QVoa}OYfdDtvlSW4dX6)^RXm6FY<(+bwQ!U#b@U!} zJ=OVsoji!}C8T__;}w1veZnf@u6o>tP2M4kUtYh=V_Hy!gGL|-DorvlkHw%(G?71Y zX1)GmYyRCK>4*cvl~Lyq>JjBYz0?GZj@O+&^}aK&h^|O$Nd-O=GZE9+h)OzStX@vE z`PB!0#wk+y8NH#F8EZ}DU!(=XQVyZ29-GuxpWK!xwszj!%`2H@c zATVuvBSkudTkX05AqEpUA27Pc9I+~bn>$0dq_fuydsBn_gdQ0%lDml(Zazn= zjf*C)h8}B`t+s8YL|48?GJL{&8J>sg+JAkgZ?nU4L3v+mJ6&qnAG5Tj_DyjJO*%`) z6)vK#2Y3l{T53i7jpa>tg;8#EG_eT-vY5nbO za{mqtD2O^omzNLW<|A-nYkU8ise|OnF$01si-O6L z7V6RdF=(%2D%yE~);FFaaL+rQ4J{%?8MY;t58u@H-d(NN-QLOnW{^wO5HI-I zKy=r~c<7xa~t} zS6h!J_?E(ei}|<{455R>_X9(?UNN0b`U*16*Zc2Z4A@^-RDrL$D#l>YBoPJ%O=^)K zSFdb*s&}N8ZX+taNkFY2kJX&&&JJYOVER|jIy`gLA_x9Hk`(VXIWE6&i3kM1O^M7T+BpWnq~N!UHrMy%}YR7PPKU~a%y&F9`Pi3>gq*AzlG z&K56}FM#31YrElY9pN6CeQ!GTZ0&q+x;*jme&@;ai*SQZh9LKk9eL2h`rFp?FXo>Y zw8W?Lbe9Me>4+q!FpGh%{93wkTfNagDw8N4)>Rwbs?k{N*zhqu94vLd4FL;_UVn4H+`fPzGY{j+Pzzhv_|jV6x{RDLjgTRi!`p4?_K zi{f_&l*7>fyVyfIGI)#yH=u~eT@eFhUks`^--I|f&>=uQi--sUF8-ILnwIK1L zOo!D+_cYvl_mKUM#cv-pnc>%_VhSQ|A>Fs9!W;|O*l9PY5Nyl1mv5F_eQ>nO3QRWYVAyJwyCp<4(E`*hZd7*HD0Bh1WFDoHcz z+&o*<+yyg(nVbgDRDXHadsgcD7e?mq?#O!3@1c!CFb44;VfJvd_kJGX?;d#Uzmao< zugF9dM0itn0J$egYoY=7W>vn%FHFTh3bamACSrc}X)uAPnpzLZ>~a?g*CON*$vZ%wGsym{Pu( z?1FLKms8?Ka2lMDMM1~ezvzMKfG5udO+M-#GBxtqj5xiGfDgiPpHk0ddvzO1+7dmb zK?up@GDJ^E6km`VY&f!dWX@0VW^Yqxjwt(Xt;TAmqhcl!E)XS6#oWlvTxv*)#nFfeOq>(G2%e}6Fm z=HPj{@n?5^(11&+tAjEpQqn4508C2n?Be@pSN#V?->>>V^SQZs`S}F|`M7_4H3ct< z|FKi!ODn%w7jOp^NKNEFXJ$VMTvx~_y0Y1&7E0b@C4#@#F7mV5p(S0?hay8acQ>P?IAfg8Ix?Vrkaw&EuN1&4@apZFltV z9H!0i((!ZUyw~E{%B7W^s%8po4bB3Wo!VIMRFT6fNFd_nr5}FS#(7 z-q=6x8n$-UU+`p+^488(&wTZ!wwcnOR#?Zv8mY-yGW|J?F4uferE1u?%Y9PsTefI| z;$wQ79y#`e(}Q$Qgkn=g*Pqgnoi2LXX8xcVDqklP%#{z#v^Ssh4D8cgNoJrinv55T zhZ+iJwX^GarWiCz0|DjAPV7W4f=Ak1%cA$x+y0L8^H-MOD==XM?2`>q0Q2lpw}8Q@ z=O5e4njTw3Xjvsx9>`*(uxoE1{xHDYjH0ztTdfssAgC7@ zbJ?3WV63!>UJE5JFZ-$uw)}P3@mKFc)7qYO&oAAzyC;)(Jx>^OXN5LnxxK}374n`Q z{mY#&l2l#ffQov~69oO5?Q`8F3na*GVuV0aD-qtr|O10vdoL_Tur2MK}>I9%IehiC><)d@b^J zFg7igM{4V3hR0$R)2uI%1*Zo@Or#LURw2n+dFXI zU9I6c^F43(rnfetuLig4KhcoH#MUEF5t!0J-I$W}N_1}Aiu`CQg{WsoCYrox5_z~( zK9Z`ELZj@$P`5f2+p-VP}rjP^4D zqd7u-LqQg=fBiE7Jg7^Pt;(yStmY-rGpCtGA+CGfnoVnbk~2E4c2)h!TSO7a?Z5CJ zmP^;d5FIaGb$mQpMmMRFP^GEqEAQfyXO?t3}f$( zOT7(0r-k~ic&Bx~Y*O(7B{5Qr4(hYHK+}GhHpC^)t?w5Fb2iT$1fA7j{@gbnCQHmL9GRgGcTe^DYYKAad)ZbCmE4Gt ze+ctt@Vx9r9v;%?n_7Fyi*3Fsdq`+^U=LIjF9c?qD#L@wfuz>@)`>n2vMe?06WD9A1TwkCP-&n zoMfuQ?msekxI91>92)h~8LJlr8>3&@Uzm{uu;Fqh*A!{)m6VAq;(dx!6uS0`q$-W% z2~)?;rY|W2n@@C7HiPvn-LU8d`~|F=`uDJtsUK=tr>+T?2S`uBe55v2GSf?Y^r@s# zp-2#TC=y=^ddE{WiV&`28MM;X8Wg z`V6+l@(Y*xhsLP%?sa^et}rdB8LAgHadOn={$(UT4C4h)x`jfWX(J(Rp`&pjZV-D@boKS4;z)r2jNsX|B)|3ur${&nnEL-lVHGgMu#o^TkxBtrhR z&3T>*8K_gDJxw{^qgEkd4|~92@WBb?D2N%u9on6*UX$!()6`83W;dbH8-w@O*a8)w zRupyw)?bc3DE*WW7dD{sVZjU%3JoVAyyZ5)U$dKH5KOSmDQ6XuWI~-fWUe|&o^){3 zf}B+COVh8nZNNBnPmIAQ3lH7_gzWOJD5R zl6T7|u?!ngH=ml zs4(F+)*VB^1{HAwqnpTVInQykO6Tf-HGq^nbgzu9R{1!3ZaLrfwZ5-Kp9a}PEdSK2K=UF6=(tlUdfYC1UaJH2{SYoInYK2H287c z7K0ayYBMvbgziC_AQ(`VDCm4j^;;VrQk$w>+3 zNgbvz;%vmEq}dT72rX|H#929qpC_20_B>U=_%ePl;HLSOjea7Ty58!U66HTxa6iR! zRyTOyS!8k~_USf3M;%dzp(0H))vdUr1T?X(4`2!CQ4M)UVyzhdi(P;%Yxg`sPL@pA`0LxTk0BG-BE`Br|EAlib&#e6r+H1z%7L z274R0^INZe0rnWrwQw|iyi0&{I)48)_Daip72imFjC-mv*0Q{0neeQas%7&o$u z?tsB-`cgUmxn_e(Ifa!*Q)=ve{33NuurGrd^$I?GdAa^)jeOotx^6Pa4!8hZ%h0BB`MEEJNC)c(FWT$MrCL6Rr4A|8f$BRDam%16Q)T70p zz|1%k-hd(%*e&4zZ;o;gpF+d%2>@ zPkZmS&*S|R`sSe?Bx%aUvc_P987~pyb;DIlFW?9y7YXnoKZEODm#y(C=BZ%$w*0F& zz<3cFCAnJ^X3(8CGKy^V%DlO`2AglAk)$x_Kh{@)YS4p#2=RG)R`+Ex)jrn7;j--4 zURs{zo`N5NlKtr`JsZ(Ey{tY?A2MfJmN7;87rj(43_sP)j)o^2kNWw(lTwH^@^Ogc z#@tRvSCY$@7~Xd%9aE0hP(HrgEgk+S zN5Pm`I$D2*jANSekr3Va^&RM~u9<*b*t5ja_bhKppX}sns0iJ?R-c%ody~s3s-GY? z`VM8wsGZ)65TLt;W7q+DeMQr{Gr#!#pyWB@b4X}_Cq;=ZscglkE5SN@$1Ki!EUL(& z4$7xdMKe0U8X1^~0f{j7c0i<^7Pg{);ng^C=c`qLs>u+ROmR>=kPWE`f{zj!yw5V{ z(%h-7uWAywCwznb{7bV^hewxK?Y8;v*U&YX?75xi)O(ntRyR&IC#j_AIG>Z?eJi~( zYwg@+)qWxNz`@X6I!9x+?nTxJxA6W4gmbtGr0m1$2f@KBx79mU>m2$zIRo$@7y!8_ z<^%4$nIq6G#5Pi)D#}^;uBtCD9d#OUG-E|F!3Jy)`m_l5Ngx=rJpp5;p|-`I zRnZ~40q<^B8m7uF>uYRSC=dqG2NVDmU`PD|cHrSi^TVDCiKz+Z?lgF2Vid4mzsA{+ z#j=m(ECQ!373N~)b`erhJ2 z{%SqT*LCk=J6_*f4D-qjel0Rm>t#LXH@vDJRaw@5H$uh>$5dm+4^3k&MZP(mdQdAS z{{sgEEMLSX#3TLWdhRY6mGtEeZA zAIJxYv~Ny3o)@6vl6m4!DVs%5WFg`B_Bi15v8 zy&XRbgcAsnRV<-)bPb50=8v;N%P6ddzBNHzGWi}s{70~G7i(9SZ%ziOd2A?okgIyyKTDo$2J2KjOoe2PZ54imn<*t6B9dRN`3R3USv_Bt&2E|NWK$iZ=b8t%9JKA&F*q?km5@6P6DVl$Juxn*}J&S((5P$a3 z>eisT2dEGSmXDu&sGGHwy@jNutCOpTjklANy^S^aiq79&@OxYJPd^)!{skMVzvzyA zk>`{5u(tjN|3}EXf|Asym+#+5kNsG?^7l^;`f&W zkl~yOA45WHi{0_t=kbRq`<59NsUEwjDH_p<;Miuru_s-F$y#CI-o!}n6b(rxQ|1{~ zRIRJ8V^MA$(gmIE$4sHjrxW~7{Lr7anzmppLGKOSI55zGWste$@tIM+X=ylb?oC5U zLKE9uhok_L+jR|io-a^cBKN6o%gOZGH3LYP>|kT^dZE~J7H`EJBV+XrmcY+eVy{hD z@h@56Hk7>Fw)>?<(`D3rX4vx3T!bU8J>$e3tr9c~TtOkW?VCxC%j)rtu78A?Yz{@p z#N>+hpT3j>78FSABcuR(z4#uBRAFrA1@dXZNj4?zJEWe}jB{I|LL*W2uhXkrL$u@B zUsuh&=|H|)u*MK8ZWN{YGUN4Kqh}0?Q>djhOVsfcn%CT0JY5XCWb-MWgD5Y8a0r1z z_*bsgNsXUJI1#8~hegqxyr)9R6q;ODs^bt4KBj?ZZKek?&Ax?6eep%Pe0QASPHI}A z%7;veHm}&NM=z|0ZmJ5@ZKJ3*K4te%LBGB>r*`LtbWk)4@X+B+-!{w#@!cg11n(zx z^28^maE_0`6>kph$`gE?NXM&qr4)Xhq@Cn&uxL_?5Nb z>*9a=g;rUORjw!gIE-FGD z0X4S4m@0g1umfxQ%`C@-om9q>oMJAr*8J3h18l>2f0m}5U`gz?{Bb~EG zOoFO{uXMotXj4L3R^~;9<8;=-ulZ3MA}FB!<@)=lr}rP)>cPa|NyE_B(L$(uTR4HL z-YQ@stXF7oT#txa)N@DJfI${x2-o=b^;n~zCT7)x50{) zx@ZK5L7fA9+c_yD-g?j!VH)g2mOtM%3w{SN8u+-L(S(B;61Em8$Yt*?JtTWWChp}@ zv*)?XoTbt^3N&l7ib=NzOv|U9W(d=aGq-Re2Lb-l4beF`t_EJS>INQ#d!wEd0?%GC zcupKkD;$pYK;di2CUru%@JM#7l}9fG3WTA7c$k1Gc-`5WuNaRG$FiJ0j_yo{N~Rd= z#tB>sZbd)S?f6Lun1_!?M2KI6_glZn@9Pjjfq}mr0=^Lk1qv>bf~9=Wgea2b_l=hq z)oQ!-%8gfghZfMD$9lx0NKZRgD}}X&2Knqtxl4`({)~V*7#}Z5K_7doh5I}2 z`j;M7plHSB^gd^4up)g(6osLxm~?IzDM$OY?337?*izFKzPU^Z`=?`Cvopu?=u6gR z?-_bAOB(lWlMC;;JgF?LnBEvRq1`Qy(!GqYLcyWX)zTTc1c+ z3ej{5$1g@#Q&zJ=#z@jc=`9hcq_N$_6YJ?u_rhQFT|oO%Uk{}V^Nsy_BxO!Rfwc&- z6Dx8(g=JZ=epvpviBr4m09OEgEk6_1h7Q_|k%uf#yDua=)3h;@;`?1(y$z?4+E-uZP3)RxSQ)K%V5+%Ujer9o z_~d{aQKy#H#1Prng8M`c@DaiYNE6tQ>FJC63zAC~q^fn^m(MXGsSje$FgQaLx+x){ zo7(Tf0@BW_jTxrq5O;jAmXSv6rSKgElvY0H#+}c*gf{b#^P)XDgonhe#}_QaL?cKF z4Q)2jkUJ#oO}k11lpLMRf*CV#4O~)}IB8CLn+9ywgBk$^v?yP#R#g#GQrRYwCdkSF z-}cDJ8!{5f*}UQ~ypJ=1l@4hi3=J`kGFz{uh`hF@>#+P)Pl{z$y_0esTv zb$c=sYLs0u!%MVtJ_}VG@z_ZYFDfqf2UHL~i{%fA2#2jC66+r;UfurER(2w+`rY7@6 zP+yXQ1AB;2-R5BP1s;Y<)r_wdvS!K<4h-OEPWm*@(5b5vxnS2s81h0^k`~!hB2(_#&ip%xy!UM-CcQ|v$wSJf zW@_D4%Ojoggh~b~sAWU%+dCgBw7%`-BU9-EwW_VvmkG}!iGt7o(z4$#wKt&&!-9JDRjbr# zmDJ&QacZ<7k1zisnAJc86fZqlFhKF|cV1Y-h$UHJqdljl=70{ah5nK8eCt%5MI(b*_wJ2>ga37s_Aa6KVexPbrF9_{omhpZQ!s8~5!d)j;0YV0mAxOY->^J4Bv}>SI zMkOQ76GEOix};q)uB$ol$wmCrK}WXB3!N?kt7335IllSOPg%aa*AOOue@#a*)rTKRB(!st6e~QXFqSDTgy~oc z2{1&K)65?`HB*j_ppy#9eP3{(PG>51Z6kWbH^S0p?tP3>&(iC%@5UPI%sbrq( zrMp$~)!~+3tz_%GSr~+hI{kglJzZSo52o+(Bl!fs?X(iviUtKNaP9P(RHTB>LfI~$ z4_tsuNFJn$KJt#C)_R5!;c;OI+hn9kA615zOn(m5IYllAsdVCiy8yd!-MUnKf;4y2 zU+tIT@cNmQa%NK8ZN}PL%AyTi*j=$Soe6__SzQd`U`MkxDGtBRS6m^&74(4%&Ca=yX5J!%A~wE`Hh(^x8?Ea0tkZ=IjJuTzI)x@xlVtA z6+de~vjT^=F6>m87c0)#q1dkd4#V3LC#K%QKy&IKGG|DHCMl#mt4n&aecB+gump>1 zHFI;F0=75)A%rxyBr$_AS@~*pHs7@x_{E!`GOs)mun^J)2@W|M-hVqgcjB07X{mhk zV*dp~4A$v@Jo__<4#>0bWn|b=w$m#j1>CgKNfm-vVQVMUBZZrFOdZ2)G4IFhPrS|E z-FfW15#=`p9m>9Dk_pG2ZidL33)J_fD?JTNq*MksnF6=pVHKK8WegIrShl{yT4UCh zNoi5gXt~ZJ?7w$hbcWLT6P|q^2x3A42`+Aqm9H9%)F1-vPWEuhM!!MbS_JF$x)Ov;>DOb=LzzS?{HHFws_} zv%1ZFBCuwN^u4gG+{)pO2Rob);Lmv zhbAgq^vdb@q?GRJc0{<&h?bAmk12n+I^@{7T`rQ*HiqtmS_ItBPMKFZMg-lwJgam4 zfv0Zv!%8Dgd4+&A37W78HG}3d$>Wt&_W<2d?5r0TkT3yDKFpC=sH9d8;Toqg^ROKQ zw=s+`NJ`I%@J?W&M8S!+%*OfAHI5ewXoc2X`O-17dLZA=iJ9=yn;_ z(3?+Dco%Cg`;PfhV`1ogYJ^-9WHiX&IpN2)tK`yQv**(!cex82edk}~MqtGfO_>{@ z5(`6~L!<2I^W~CqT1g%^CBN&H^CmrLkagM|hCup_)Gr&Ls9&4(%iiL;N_>~Tu-@lV%)<(G zzAA0`!#r(1`!rL#_eLM3!#qgQLwkceQz=8(4G%r%fF*iVKmirOn3f~tytl)wauG%m zdMU;M>Q#hyxP&h$;nZmmy=<(YnhE4O?C8%bIGmZHF^)=MM(Zj%ibdVEOK%-C}AJ zi&aZGGr*OOsO97qPWBs@ZbrT=KBPh}uG4bWN=>s_ll%X;d+VsI*7aR@(l069@zUMh z-QC^Yt&~bPNOwrLfRvzgOLr;K2#884nBN3-x%O|bwd0&G&iDpn@CRee$?WI8ulovg za?bTEbA)y`VWIF62~aww!STd)+QVtZPOkyEEgBWTxvuKpQ2gUW#Zmc>i3;>zpC9z& zU2xtqMnj?Ds&ZyyZ{xCB$fqb1Bs_*U0gL4qJoI7mG=vJ!g@GYo4z!??Ha#s6r_s)` zY}7DE$B;9Ri6SNA6*+uXQDhV6*{}iy@*Kc~xWbm(^a~GtaKaL^>y^ru%r6}O^1=!>cb^=@w3g_D;Fo$Td zdeW^Bs;d>k0@d8_#WpKGap3?$_R?n2qQaNGo2;?WGTdE0GzKqA5zKWB8z*b=aQVOV ztWY5x)^wUElw@f{5Bs1xlCV5EyhL>xIA13oNc)4CY-306(1QYmyPF;ffRY@|$>h;Y`nnL&3}FSUcIqMOgy&*d`ieHK9z3m)DUO@ZWC|0zvyg8jrI9C(3kD(PY9M;ZC_yr1) zYq|{`3$>8wX%u*GWw2$xwW8;N+>M0-GM@~lEyJ?~8_yE-SzzEvtM>&evWZlGP5uAf z^Cb!b8Oqe;9?IGe6}nQ=89kw%0dCF#7KdFkWr;Ft#dY_W+2LK|1XA2%*_~JMJs~Wx z1z9jSjs$Ot>TDV70=}^p(iv5+OYVK}5iD}f$^KXyQ;VzgjE;lQzRbhJhZv}S;;5m; ze(vY`P=`LCYvYh>Pc=&!PuRfdAYh9jYb2QgN+^L1QG1Q+Mr^K&c>g^C3%uL)3$Z6zQBuu3vm-hX>ZR_3U7$>?d-b#}y<6Y{0_9P7$(TRB*RH@;klYsY%He zZHajQtg=jJ=uJv^kDWHhWy2+cqPc2uXd>1#x+SGudgo_N`s~he7qRqfsXS&p=>&eY zvsrD&0;abQAn-8H+sTKL`w44O$Zl^6W5NO`ogvwef)Q_O=<_mgiaz}76_VB~Xa66s z5F-p+bu6iu=hWeZMsjXAH##D8V_hk4^C4!S+iix>kkj-DGkmSJ%Tl9DKWC%ZNJ)#f z7o*U`?b^Y;?$V59J4ICc9W~eeZ5K)+u}{l|cd>8%BsC{x`#&5M!iB4~8Jtdw_=$I8 zT5eM|fB8wju%LwX#Q^j+^r<=A=Kyq)Mg#TaSUn<0vR_wGBl1_ zSbabdPzGXl@rGP(KSeUNd^9{-Z$`=ec02e1?o)0iI+|NBlV_qL&v3X{_8>CF!{rpL z`jxXqpYzV1An}$2O_meDLK(<0lZV6MaG}@_6kuq!th79l`vzdayVjmK=HIfGvZgZE zzSI%<3XRM!gJ0wIPTfFNVxat@{n}aQg4T!iv(HT4b~gDc^X*>kc1xwQ`|)NoU43fw zOU5ftS@nrobd6y~T`fK6OFo+vc7(n#SR#sNB#RqYYVmxtxblogti(MM!%ewks)vYV zKkrkAOJp64|AkU>8#xjg2aZ^fttq!owt?9}c$Dw4Ai@PYgRgmBOj| z4F}~9Fq9@caiH|2S%iFEyh)wAt4>-gV;91l-Gf(Y zDr}9L;9>*_|2$DGS{iKn`-v*?iysr!q`D{hKPIZvwO`sHdGW4$C?}2K9WD1g#xGeK zY|hGHf{#2R^x7;ij#olhY(wA0*ZrD+&VUn8t`X2CUh)Nir2v12AoP}s?cl8gMZ=hI z(c<@~Qo&S`X^`)5sFI!lak~*~`#_Ox0pwx&=w=a>dzx|FKG)U*&$5?eGwGa%Lrzn^ zgkDWKqLcipZxvhK`8aY08b=u>4rJlBZgDV#J3X8_x~=yba0SI~3fvaKIymR6p={b% zX1ezCKQ(|>6Cmey5@I@5waNvNke?W%=K?MA9Bq5na z98P~0jj9brOr&D#IVD2TF1`TIVCq9dOeoIVCayjG;kaR_vk)Sg`3Lyq!pZOD1Sq=@i4?%h(J7wbyu~GE;#);hM>w|5W z#l$T&3+XW@%BAVXsN5@q)Ck54q_XZoG^hY{gCr70@3ED`^S+5qp}`dg#MlNHDxT9{ z1TCvh&_?7MkrPCaxIBH18xr}^pJLNUCz{htw>b<#;0iOsi2*~Ym?KuUWBS@lnHPc; zrF1gEWH;4aG+#R}9r)FyR$%CGFqklgO9(!woG@sU0_>Fa>3)n6ExLiP5P%Oykdh;= z6-J_5W;z>^tc$x!s+1eo(xh*BLcduj6516RO1yJz3dRW>m|6K3;&*FkDi0BMdTwXe zc~;yfZk1cgXR-@XK%cW>j}EhW5@VwNR2YG5R1f}`=VjGlz1XpGd>4Mf=P57JJ(Q2y zd@2!Bk$1*cb24VgYB0@|Tde(GZo(PC|on81$Hf zMMM*0At0rJqX3hE!>Di~b;$u0{64^;$Odz2b@V>Uub_m#cpc3C^qhDy%`qFF*#}$p zG_mDPo0mf%shoP`TgOw-TL5T$=`R^RYyHS~pmHl`o<(^P<&(z(LZH>&^h%_T2=j~_ zxlJ4sVOgkBd4>g^E3Hazx$I9{Ba3W676L?Sa#2XQE(6@Ef?-+##u+l-OT5T^OC=8P9)^9twJnV_fb+03->^xgpO_Kk=%on+jddu94GY!`ZA`Q1^%+9L&gP2m;dFdCFh|iADp4FM< zOISfMA_2G!!oKarrbD_$gf@krEnXIX-QfXk)+94Y;#})5GWh>yP4`oxZvlU;l`I~o zCb>>4!)oNNqSc?P&wg{dRz15#+_}t0>3(G4d_6GAR7R&ffh=)T&th$47OH zM@6d6_^p0Uoc`|@wcBhKAK*Nr)K=Pg=>OG%nEJp}-Avv&nERCsyV4^h+JyR~sH^Eu z<6c_n+V70g(&@Ish`({HXT92e^7d0ZObN7MF6_wwu2r%Ltg(kODBHoof!ZN@Ky9A> zV;5MZVz_w|>+o-SK#MHkE(E~G5xDu%9Tll~(c?+q*2Y#<;wNjLRnib2&vnu_C5wk% z!gGM;hwOmTgBM)^L#}r#v+THSCXc)tAGG(SG!c-^-mME$09yzsrDpIrC*q@utArAY z21=NzV(#)*%rSl^#Wqd9=2pZ(GNry<25X7^*GAQe%HP`;Jj(g`_nz!GYl-d8-eP*C z`U+)i2QDPDZz7sq(eLc%;6t@cL0LRu4hx(6BUa*HKR6ZwKp8ltNo1kCcE6ufP!vM0<8^vV zV~CPEIDw=pASxJsH7Jrg@Xn_O!-4l|<99-?V_wX$z}hIJ55; z&LG>i(=(fMo~C1TQzJX~RRNR$vhb~VvnpaOp{YkmGVk`%9_x`53B?!fJZR%IoFlP* z?Udc#=i9wL3x#~1tc|Ue;Emb%8FAHvQX*)@_-U>%^$oBzu^z6M?H6ZUt{0p zOZrw_DG*jJLRKdD#O2nlJ3F)ckdNOO)HB}~9p#<0As)zH#j9|`OPI(&8K{Uz8!$Ps ziWs7kmPdM?AV@{Z$wW$3O%Qh=dpIH;361$6p|SRc&{(r6;J=tQm)B1z6jjJ@^emj=M6twJ<^E}!RVDckIwN8D_~A93 z@pGtp;z8Mcw9t5GdI7m;^5@5T`AIXt4 z_u#9RCs#Yw2Iv9c&$V~d(qQi2*WQnRvKdY41Tufr-g&h_gCD#ITN{~a`mBx?zYS&S zH8Cg+_wvW*Ns}Pfr96RaE{*@0QEEX141zch8Xbj)at;8AwwYnY$)_>?+^p$J%On8g zJVHHFS`>dn0^52k27vF^+<;>y#JsfcoF0gb-|PFdQo8Ruzvqfl$i%8ZJDNyw0M|V& zJS6{2@gn}gXx6SFb4vYALCVqV^yQ8%>K%;&FS8`YaGqV+DQ3p;l#7<~7m+(g84mMj z+3Pf?>Qa3@zLjl|p`KLj;1b*H^d3HtWs3q}Iwuu}4ZiW3f+X2^DaJc|WYS858%iVl zHGp;41t&f?)?*|R{HXb8IWaa{uatd4(uUHHQ@>3unBU2y>A9j?>lHOX9_9<|jipFj zJM5$^k}SPrGREIR5-*1kZdtUkC@BMEr^SWT6IJAOc%z%%B{8 z4&Wh9Ib-yWq`m$9Lko)bt;fNhuvE)_$Jv4vA6j7u;p6&8g}2y)iYLwE?%lQh3YC+; zE6u0%Nzz;CKBu3=20l{whli7C_e67Q^tkjzAHSfZ5PoVm(~{*#6k6%Mg+k9R=s7{t zBflU4C+v?@Gb++swY-HD2GMA~#a?e-1_Ne_64i;phhvR{tibeCQfzL?$Qkh=H?tLqK~vKHJGA z^VI<3G7t;p6CA7#vIc0ws|X_q9WDr})W<)w3KrwkuS`xk0`4NXN=W_Ia^UA`$h5Fkyw4kfjAJIR%?s?1dK#){lz_4U9fSQX^^ zL9REA`wduHBE9Og@&AV&u?$oXBI4Jx-95^ow2H7#f=_R|ayoVp8cU<1^XP zzWn|k!{)=NhPZcFus|*`-7jm!|K^D)IR?j?iloHBl-FSv8|aPEv;#p^p3D|r!Y^5< zL)uSZ!7&^&TAyOj>7mrV(XHU6-8MZGLA+#&=F2NA71B8^)xEaDZQHJ(ndMj6Uq zJm0^7>VA`(f3sUT1qJx8$+!a7{47BM!5d<(z>k3_LHnPK>3>ngei%yMU}?XtUH_W+ z`#<*$m2tEO)wM2ASx;X_4_8|^ACRu=<>Bsi!}-10rO?c8qfs|oRx2-COK0{!#WH~m zV(<{J`Mx*51)$2djy?{cU%s_77$beN3ueQAy$f(-4p8K!E&C^u@xP---)!>_|B40r zgH8-}x4W_1Hn^rT3-CcTyxg5Y)!m==twQ!YFXgYV)6MDd@(T!F8`Rp`Kou;1ZjS&! z;a`Ld1xM2`sNb9$yZ^sEHy)^(qqT#(i={WHVzYH|x!F!$@YiGUw@1JWRk8H)hAO+c zgK8u?OIHtJs1bNoL0e*PM>iIzju-fMA6sjOoBgpm{@df={k;iPQu{yMiXW=tYi$XY zvh=dD^l`u0N}A~39=iZk(h_t#hibT3`uMonda*#&^b}81 zSng0|Usn%XFUy;Q;7a}vHk5R;@#?RF>iBv%x>>qf_5YyW^A!CDoBmYb{?h?-#{35x zgO8q#trtky)Npb4^|G7n4DN(Fzf3h5^2mpp|~ zRD3B?F8i4NxUHN=OU(MvwyOQBf=Y7$8|NM!WTupdDiHPHN~3DKo;bCcR?+J5F+(W|2|OwpyWt`UUpRvdUwEof z$h~!84T2Dgqx|zW#TB;%4b#(d^sGWP5nMD_Y$SMOX$;`jb+Y>XAIa+8_Z6{A6a-qC zm;-bnWHz}`X-*xslKDSKYyTn$P4KS*ay;BYdy4BA!W%XM9Pkf8Xn#j-XL$3!O>K7t zsj!hC0Pc(v%|ol6?I4#U@45n$SE}u2xq)8|82~wf3=a^OaLnH!w*=WPFPSg0Hf{}1 z_C)AjvGCSBG+KCkoPu|bX9+_LeZ!1{lMlP;fo4C8(6#zW>##9_9s4hN?Y{|Je^J$F z@PGvNo3GNp)K?2Pc>jN|uT~KSHC}(MU=ZZ{3k8FQySIHV=^p>vT|mTkc{WG{{|hh0H61_Ji*0PZLCYy5z3+M#ndc zZT>}n2T3&3cZZI${ITcpdWNBzq#u1!7-O|soh5XQABFHqIW z8^~#pk9yC9Xt#O>^uc|@{5>2}2XF5D&zt+_Ws$+o-OJV1%f%n+?B;&Q4GLCfKkutI z3)IKKR*)AAV*Oz*1G;EqHqUeZC>;Djn&}oI5t&9Eto8AC$$(XdFoKVUiGz(UtqV?f z9;QUgYB8X<;yAqTk$2j;J8aP*UC`j1;FF9OcVOhIGTKIn&x2NEh?3YZumSkh9fCke z-^p%E4ycr0tz5dTg)zKp{PuA|WMo26AuK>i`bXE}2U5gR5JCA$0z_i!zI;m1E6i0Ush#GM2^Ti*>T~;)IeVgZuKbn_bPCJdsetpYA;yjR^eP9J92qwk?ro9N`)sEW9$>*2$x zFHJd)-!d_cGP}>n*8TRJhIxkcjt1il1CNp)>mdJTov+gBhK7J6{mLyA1U(i60mrUt zNWlgP=*lQ29Dye#I{%2zP)Xd`iht?xVnRc#96^Mr{u7F@Of`v^U#I2-fOFX52dp=) zm_hHV>-@>AD%Wv!mAlmXCul_>TXEDTK5YG?6QE=m7Y;cDp4Tjf=8OqhFw;kWM_K3F z^n@Kx^TCU&(mOVHrk$?xMx0)`3a)(JP-{`~KYPT^qiq}?XKexw&j;;-YvU$c@wAJ5 zV>B!$C=!xvg^Yd6R~YTjyY8Bd>$Ea071fB&jiP1F-&XnLY})5Oh|nFNics7; z&4Zg0g@vFdRf4$z6%j!X>Vo8LA!E9cEABMi0X39k1u%cawV(p0ESz9`#{l?wUT-8!&|Oq{>%l9QaoBSV9n3=-{e!WBY$ zcA#6Hm$1EXoc{PQ@vEaE2URAIE{F%F6|#tx z!1@giRn}V!U`TR^sO|3FCT z0zSb=P~T^&-Y?x2=zYP?78OqjIF$Jf9xkx(OaJj*{9lJ^{Cym*)z!ZOVPHA2of>}0 zL^@RA0jU_$-~3;>@FdhCQ%*QA^;89oMgkAk^P2xF@c<0b9HWoBN^~?gucO#HcR`xo zr8UxgMJuA9`x#9xS3uF&x@}%4b1t<%#YAi?D*n}bL)rXHlLuVovGthp$;9OYqPP*< zS)omBljy6#^`Ixj-?(eIgT^mA|0^mq4Q;tUqF*HCwPa;gWz}?`a_U-84MQCTbu~~$ z2CBw>7Ca7r)^A#{0(Ib2VuG0(T3-s|(3jiXjw>CJFq?5}LxV1oe-cGNX4(QVk%tz( zCwT5V3@KtlIbKou?Yoxd)wW&U^aG2hXu=aHOp6)yqv{TrtI6C}m*-|Y*_u_tRLs@! zCZ+2UvU$gxOL}@cS|hWTeEa!Z&K**8ZtJ&5E)K4o}k4!!ujPG2Y<8eCG=AGdx zhAJp-6>W|t(;zAAT=51XRE-M~O{uAwlqiTsiZ0pxSCkcpwKdN4$*3r@7Gh2+^S^}47-6r8HoJWc|mg@z5Cbb;dn&(H{ zM<(x1QDSf!w`VXP@-V89AX^B~T5i{{dY3d1zKT%Z;&F52eUrwEic6=>L;q>WVP)wx z5jX>vGbc@7HOYS(`0;*Jki)1`NA!5p)>wzq5isu5c& z3^58msj5|kz3;PT{TlIr56Df(^}803aw&RBCgD*9*giNiLP8Oh2DD3<#|I`5LczBJ zCAJJ|#;I}i2kdPzm>H_XfU6DK2iEXbcms=Ue$!giH!=+v!F$FU1(b+t60g!CO3y@R zApQ`Gbkzzu3m;hix9^)gcB{~RB6;Vf78$hgewu_q|BGtILKDabpF#{qQja#y==tn( z*~Oe`x^KC!#)vA6qr!M5D8Fu#V}L#$qrn^+yo=2Gs3{K%Ys(EQQ;o^Zk|GMO9Ev0+ zzv(=m@(kxLq4wrTZK?Ge)I?#fnAEX0IWi+6G|f)h@NP;etO>)~=(jC|J!-?&rt;d8 zp&&LrYRGBJ;7xVd5N_QyAaAdoQkvQ^e;1AA_ipm5?OixN3}iU%sS=MeElV7o5YbC2 zSS&z+8PN&#lS5Zu^ll1IR}m*<|HX1=hq-k$6)wax6|o``hO7;jeXVPf`=(a%0bSEm zuI23NXqa^kC%eUsWvYkoR+6BR(S11D{FiUJk0$eAr{AT(di#nXns& zgnq>1{iaB5t!1ZXYJ1J+bNX#LhkXl~#8T6gy%r%56u=GV)}SLTaUs`ZJH!+oDXJIt*4_OR>@ih0m)%18dOD*877!ZB z^MJy-&?Z$GbB>~Gl1iVo>)0$B{5hhQA&Tp@{~AbufklBow8^G9<1-J8$a~OH|7_!UrI7E38)Y?wuvaJVF$EfW>JLYA7tB}A{_G~NJzlEPx@@^JY}f9?pe-kwZh4U%9?&NFX24(UoGt{2Ao^8Vk} zTR4p?cDT)sbk6n)&GW-voubpd(5S;Xrm40?VTOfEIoDceQ`nrc-C$m|a{zICDR|&H zT<1}|)^z+IMvG&hv?p{F%*P(�r%;R2G-}ka+Lp)~#&!@Xy-orT1^6!?YqOaA8O_ z8IIDs8uIIh!9Bc)LEiDj*$cw5EO*{&C($<*JJZa^se>_mUEy_CgC@u}{zzJzH%)!L zM(3H|;`YhTh3L`bDbURmQoV`J7C~mhdLYU zABd9L*k^MW1Otv*4J^~*x&@X#HPKz^i+IC|VUF}>Ij;rFbrryTUgc5d_e)IGI|<_P zLsuGN?NN~8#8pO_!zPRqM@GG~T1`1f9+ZjzaFI~U^w>gt*6mz=Wh@x4`~r#p0wMT4 z_mGlR*N|0XlU7&#cZCKR$@f1^KW#yMoR%yuiAMtRe8{m~Z|@Z0{R_2d=dX?<5n<$I zpPt4-z@b<$;*iPe`ukAxFX)!<@#-`B^b?Yu#s{`6hMK-mlF4ml4b>I&g*~BrPoADH zAZ75}81$mp=@aRCp>6!+`U+ck0;~`~PLq!sIyM9lCfM9d=Hdyb`RWa=s2SOl=of8u za9O7$V8Mp9h>qg`SO6yAiHGbCkJ+R@DuPom6bW&pC>mClCe>RlgPHIFyz}t6kP-vb zS1CAK?Ti^a;_R7WKkUJNogL|q> zQDjwV1uhCWw~g+|=$Q!4Oms!h_cuRZ6Z6I!Q{_r0tq`00-0#3bj1(pF%>?A%kt1Np z&d2JsWaL|#Kf11~7W4ut^7jz*YclHnU4|VU+iR%lD-do04#JTZM8zZA*?6$yy!HDb zmc7m@PaG-UFJC6N@4&TZf`*X4xak((09G)g6i=Aq+N4uhm4;qh$*j_-x%=g=4w8xn199`+|dygkCsO|`4M8F|pU@M>( z9aCApk1X19ta~igfcYwPQdO)&E+oZn`;1w-k#9xmLeSeu5i)?6<#4u8>=?G>dDjd7 z)nyAzufE?7ZhZC|l+p4Tw&4Tv3y;0UtT}3P)%Hi>CPMgwV=2WLhT1?;d(r4Lvsg`+ z*aL&n=_G_QrlnRG40sgSMN6Oe@rm|krdW8k4d;ec7FnnX z^yBIu%^=|d7s5l!_@~4$Z=m%;7@dX)*#bk6wi3N~kU)ag1r|sU@mnHT3*a@9ooL=g z*+{0$%+G!k>Msj|2G`yb?hs6Cy4&|Lstq1L{M1C$udldg!H<3KYc8DY^t4)fF^c2} zZ!!?@w(gss`*JaJ;0UKp`IABu#bGT`n$H4p0!&8lu(xCQLgCI-?oCz^_EVd0Ow%^b zLRqJzV1a_)>-06GbpxSDB1$0RwR~iw)ykWHcfrOK*lL}JfuEF{GMpv6OwyrMcfC+c zNBmf*)ekQVF8c`q85Eu>$n{EH`D>;A&DaCQnqa1zzN8^kT@EU1AgQXM0?zEDbak$y z+ral%RZ-_AeGL5D&1(%+l~e`;9dABUi=byIwlWokh2lIAd}tKg+NY49P+FgsJDNaZ zcnvk(UcLGSDbETF-v&h-Ls zB}xC1MwW0C-fuO7U1q(u*qI?%lzadD+F%tn7QT6yO>n_w{(?OH+2rNEoL<-0cGamC zW@^-Rq0yEFZB+7RHQN4>(27Ye`B!B9+THE1nT7{6N?V;fvfw#5|NcO0zA=&ep+Q~UrG)khWGKww7_X){4crL->>cF z68n;i;-CJXUfa9Vf2>*-$ZG&ay_Az;;)L5yGh?_yG%ONFKwA~h*Dr!de7Fk-WIAl6 z&-SpTZ1XnAB5W|*dNH(%lyARp5luP`r8PG+Ju6ecU&!3;C+46A6&wB{Nh`LMrlQGy z?~0rAJ)S#8Z-7#0LU8C-DOs~9N+^3IpdO>k9wHlr1d9ZWDv^&*vqi;osXbplxB6rJ zk_RH7eGstj(Ub#g}{Ii2 zmY8&>_cSYmOcp~IVi>?De}*Cd*Bn=VLodeKoGSR4n9W}GNbyA&dTSACnjhF6Pu|BA z;;qAUEVvMxFe$zEM(x!LYp&b2FP)mHB&)sI@;v^eWoQFGdL=qa%GDnuPydZs~otIz-MIi~7nky7Oxw$)?Aih643gY{XRHF)B z>!W}r^#ulsrdqFpj)^SibAXVMwiWK$U-K4O?S5@`v(@@~pUE=~L&^`Xu>?w0m$BY; z;?8OJ2iY?lJj=^%weH&Mo?g)1wx45pxgq+%Xs~H!qlJNhKm3-I7E3vPH39=#6fVlQ zW?lIR^h+ujM1beI(n1R%E$TSsbFKMF!SV8i18@<4#BlysE<@64T8jU=?&4(QV*}%L ze?mOD{{ZoX0lN@@4o8F*s2>3gc*@M)HOe1dnvD;6w=*`kfjX<0Hp6uxae( zf?^|DM{dJUZLS2U2AO(yjbag_Op_FMmu~WUYghJ5yESGF&zw`4)5&D8j4D>-Z3Efho+3mW50B^pvO_gH z;_FH&v4Wr5zDt5h%i@*I8Gf}&l&?IHp z(`U@FvR3ioa(1!cjIi2Tm)cbHVxzavS*6bY;fr17TAumYT7j=ZjxtZ#lzfH4j}6g= z47m!s-@vAx6TPr`kTHqyhWDs6%4~E<(UdZcrSYIBI-kgB&c1yz5y8?k%eEVR55tcHQdiSKLzMTHOoHB2%|tJSP3JMdv}agAJ?!q zz~ZSsHxs_BsbMiKprGL47mUTR(|Bb9FTiR(?MQ+$KcYAUgAZI9N4p_IBNLp_q-EYQ zS&B?HBM_XFrd}4K1vU5BHU%wPyBHuccuZo5qv{u|O4u9pv)bg->1zJcg&uzedq`9& zat&AM2k8X~S+o5k89R^77d%$cLXcSQ`mZuSggn$yoy>{4ZH$r5rav)%d1=NOHdB(c zAibbmR_>dOMiWOa_l7S z6k(2>cA??Z*|MPQeTZ3WEiGEJC3(+un_50Zf{T0;2ejI;l;gqlCg^K{hYfJxG59E_ z^205#LKlp;M5Z9uup|KvlIic_6gm{-Dm^rs9cL!B!cD2BReAczm`yK2*5LVL25H#F zamZU@+lldH!?KE$;LW+w1^#wU>MsLf@<3Jcd0yaT2@&->yn8L1Z7pK_=J@`TQGQlQ znL?GecU|eD*2--zTko$2Tuk4hh_r4UmWmli48ntf18ky+xi@T=;(svLoL+*WG(=oN zP?Q$cq9ARfdu|hNJ!XxX)YyF}p(_hvLx3v|QQDNu^x6En`w{Z3QOu_xS)U$K-nSRw zpLa=X9M;8I%|+k(?BfMJvB8`tCeX}siVhD8aF(zKJ-usWA| z7KtRGpf5XkmQ7`mJH3Mhfn`7ugir#_&!^Gksex@RC{@S^f9H84jq8E;*`9QOJr#Am zx_KHri)9TjF9YWCVN(Fu1yy@J+I9J;qJCmmu0J-NyM8?9*4r$^&~bZR2@T*rlZXSh z(cn|?q_y$gFqRl6<+$I6qYD-tOy&FC9MpdUFzN!GAXRsgk<22>8VKQ~JknmyQ*QnK z;qFvP!{Q?tJ2bS*Z#=p;2%`XqFtY2b6kj8ZmX+zoRCd^r1y|9H3Sdmk^IKkjAdHs? zTBytwk1B_rEOt792;;*a2xC8`2WimA8*7WNdR9s*lX>L zGcODevcDXOHp0Gp**;bKphsS!?_njq)}>Ze1Il3!IY@BE0#ume=Lyeef+DcSXdQ#3 ztuZItX99h@hcIOsFt_N?6Vc&5c^IE?Vd(k(kmugf1*@SU0#XZilsTgn48^e8x)Jgx zR|t#s-|5gdx;{ffgHiQj14fQcq%d1`=@QN+_dt~KVV~<=G@*WDH+kf=ZI`5c!h1Aw zY=$%H*2xVhq*>9Y4Bc^@dFSw?xq7TbZ+2TjNpRlp21bb&eDDS^@E=Md0RHzN)(2H- z$>G(h18!Yi5U2_sW?{-Cr(2R(#D}%n61rmT^63NmZb+`$oAbmdP9Pf3K@a4N3L!lF z)xUho2lX;&wB#1{YXCs}DvZUqCAxk@4<99^6?PkTs2N2Fz5pNXJ8}#xT;GNm%8PoN zlXFJwB^s*mv0I42o_>c1Wo~J&4%+g?^jcy+5o=+-;cao63|evMihkdqCOl$x*lcRt z^+}{lx6RyfKRgn1Xh(6CcZ%NP;7QE0YpfA@2E-ak*-5oV5#P#nyIcujBZdVJ!t}y| zvUbnwCWMZ7iVNFLF7pT0_^N-R@fX&p0HA|8!s={P63+8L&^ngFD5+Gfux&OM5vG-K z#%-zs2B_AP*Cvsvxp3EDV=T>~O%=_V&^6eY1cHrJ;qr@HSkJ{6NUEvh>BQyL!dt&G zfM6q;B~QsU*hqc@Hp=bYfQ=`D5{stmd;~t15D;u^cX&jP9ZKW*vYdL~c?$i?zrXxr z^71I!6teV>heS^!3sp1e;ZSA5B%MS`W3Ui05Du_56#TM?yEHfi1?Xfk z0P!DiqbdkD_9F{JED_@b7cIwLKkVU_%K!#SxT;xAZr-}TZ%O{&fg3H>U>4AT$d?+F z9PZY@OI5+qirRuVMpwsh7FS9=I-yx%^=S`RpOfF)mwdbEf9Yu!hGic_*F_@$l(wWTq6bHY8DQtd z=5*r*cuipLBP`m&q&~IEdd;FGQul_Y3Nu=YA=zkbJ!gNenFoKk5b2V>*}mS=fAYnJzAhUaYaDw(|SK&K|Q2h zn3y1_U#oNv%O!5ZtmDI6j(6aoqRzhFTuz~!V$A@7n(R>Y+kn?kB`*|QVa>@ug;SVt z3W$#_HuB2xxA`q7+L#Da48$*qtx>11>LXGSqJ|*i!Ev7A-%()spe3cggc-ILe~@gY z!0GjLl1>w}5=<&Yp#bc4j_)a&5|a<7=ndLrMQNByqV+=!pFA!bugA}DMZ~8z%Oo}f zdRku6s={?E9fgxfu#9MQARGF_jmIn9vNWx`fX!JuUXcPuCwh{elh4jqhi|wgm0)w`pq7mEGTyi7 z(8NeTbCK}#i$fmj>gR0AbUn9Us3S5bQAi&|MAOei_R|qiNH3FOu z7(o9D0)BoC0i)Eg!bBHEvR;zIfaTpa2Auf|14g;Vfb)J~z~5ei7%VyiXy&1vpcspm z8#762X|9xou8`SySJ)S`dJf&#-VRF}Y^lIey6uTtf57-EWnETV8%H_;RZV{vtN&)| zsQP5fHy6ooc=c|*F;bKoxI;FrqUR?URBy)14d))}iqNB)g_U|K+a1{4P40-;Z{o(X zek(SLehVS0#IxZ_0{(KGcn)th| z#E8f_9w10}bgnvx=Sj%!89mRxP$=H3`TY3w(nJnZ161Z}Za8LbxEb}l-XS4r_<)q} zLPK7(dCD0os20(*)hI)z##!o+A7Q5-z@=Jm$e7|=y{L05K(O{Us_#It%9L_GsZ?dg zBXu|ckxWjdlIWM2hd;Q4!Xgopc*LQMyiUbRGeO>rVc9qLmXXm?rV1s;*0~7B=V?LW z953n1LZuIg-OQz`MgK53l)d_iagTk|eu=wISPe0jAkvUj0T3@7B*!WdgvREtJ`E$( zaK{TLcTa@e*+7K>r*oRW0;!oa|F}TlRr!z7EF2eLfz!cjlRosy*;n#hE33)y2y)pN zb5VS2pT!Me*0+nazD!?GZFSKj%9!&QXQ&EIpD)wM+~RACxlkK46?qK_v#Mk{ilBO; z?Px-EHv#B+f&|X|a5VmCg}SdL+KAdbH?ax|4%%wvL8Xr0GXu}YyD``;C46@zzqZFh zt^ssrpfz&xPSbWi_66s?2DiKp#aBI__B_XroSJE}MPlHjR`A0p%Ob^65QKV(u_~J^ z@{e(2h1T0tTHN-8P7;#VBFo!ZAJ3y-Jk|KV+%Eg5%cHgt-@gQYSm5PzWDLZvD;n1l zbW)#-|m zqRMXT)nwC2_0oBQn0IUnZtwO{%OEli(8@g2l#Sma8%SdDpkKGy0GxTdk#W6UW@!DpC5T;V6OKM$Le4t zjPGWItV9gW&u6XWOTzs2Y_JtDDPZ^$Vh0|5-92;{vt+_`B}Wy<5bm&U-n!FY-dkOp z7zc%xp(y|>hOif}KiYi?Mu+^SE)L{_3(Y7wXi%!N?Z9|%%%L(NXfE##^X#CI@Ot7R zamWDWdyCE1Tc~LY$L*(h^$q0ahWGB;i!yQ#i%1(cu!*a$mRI=-#@$inuu^2mab1FM}_RpVc@vC27uD{#)fA%?Z1!seyKZKfDjI)?^p{)$36S~XfS4b1o2Na8e zFyE7@IbKv21H{B+>nCbD~9*| z%b+Q<4dLBggLxMXsh?bZPXutfBa3^TT;Fh^Or1(2Gm`R3dcNvuik715J9$~q|6>$z ze6Pi%N@KDk*giiVXuW<`M3s4XCEr|oXp3GtkQ<6>R=fkn#T@P(N$IILDSz$}`2hS+ z;49lpT1)jy`Sx3A^mo_A)z(MopRZ>%EeKeSkX$?V=N8epj|R27w#z{1L+lG4+Rsr= z0GL98-(gTFi3D6?47POKd5FfAxs+y-bvmj9R|NGbdeb^TnW=UR8@>rmtf`M7ewk}7 zT&+61vwoT_dSus4YwFFUBl3_GL3&HVLYhh91J5hLYwJfuK-!LYX-=y-5h9FM$gITh zqsG4kRzg}B=&#gOt)+~Y_{K7T}CUvjZI&OZ}}zeKCJ zZM|bD)+|<%H@`Fg6xX&a#!s`KVkpq^Uix;&(LN^HLk=`dQbIH}B199T+k%YC;cGI; zfIG?FO&U-&zDdhu;Vc+PuInKGGgt?@&x!z8jbFQm(eH$=X#!u7nE%Py0B&bj&^5tt$^3I*4GS<2;vm?WwV2R6&sMrpC}i z#VPSHiKBswxd%PLJ~dSQG8Pd?SW-z#2TEbjDhJP+Ykw9}7U;kQD6&pqgi4^V0X98_ z4b12cUslqT6yxT)M%flCo*l70ub)*WU>@$IW?mcWs#qOex9+Z|tKl{j(xqBDnl;oZ zczx@b`i+iOr*9|8X;>pRudm)Wi*d8IzyxZQ!L%=j*`C?3_Y8;qyF&LYsbDvrt)h<} zm+d>e^v7aUeK#;-npI$Z$UcHqtTJu8FY=aGNK?$-DLkSFFec?dN5z0ala{6SgoH+h zI--GN7(OIA(9jz1pefF!L_QqH{#y{dahKxu6Z>k_bM)Q%>wspMweFWd*KJ3 zOF>)6v#is&Rw~E{m}rSHkubw>VFNw=l%ahanwx%5_>L#03Yk|k_d13UuG5Gp#g(j# zP-qeJ)EgtpnENM% ziw^O2m_YGz4WBN>WR9Q;ZVbs}HnyI7Kg-hn8hne=`hj2-Q@2^d#K;ysIPk=#LBWLJ zhmSumwYH%N3>9x%^eGM+G7dN(S%hw{A|y7>Nc*EO?Vfh7n!ARteVH4HHmb^N%wG4NeY@zfeMGS$cp`hEOdTIZ*8B1%{-7KBrb* zmR|mUObhb+7<@6Nb+>NzKQRb8Zz_RN0;oFB6M9DBDqY4EwisI=F~TiFSCG5=;sdG% zC{;;>De?0nyFx3h+-;KU7He`FIjFQBDcdwuEMzr!c)+NIw8$+APl5|wG}*@_$R*XP zwl2@&WvZy?SJJo|IVLuLXGoh(prZ~NxlA#T%FHVJH(}-X(#9aoc&&TAUf#gK!kd$<{|X0C4HJ@B#2~mFAJ}$8 zW<|1RjBioGKKN7-O!%(;wLZO~aa2&m7duRRnvVs13Mh#ER}Z@6Vc^q*)x@zg+8t*& z;??Gu27NFn@?^c`>vXGVzuOx2c^gWvh;)o|eX`mL({MUUdH|0MK$B_-e+N}kx-f)i zh~L@zF}3?${{LC_@YjdV`{U4G?t<%t0y%|-WIjN%W8dq=ExA?Ut!Q{(Q}Y{o=X7#r zYc+$M223`QhK0A<;92HQB;Ye@D#bTQ84* zS^T?&ym46=*O})099||PUEN8t1`?~$Ge{$QTAHDk-vySaDRXW~9X}Yr8L_9=6mnpR z51)xA{|7Q_5uSisl>7^sO$0lsQ$&2CYx{djMYF1bdW6p{+k*ExkRs5nrZB`n|9fyL z+el{ozu0^0s4DY)fBe~-+VrLyH!0m+(%s!`x;q2~q`Ra+K)OSe1`(7Fm2Q<#N)QAT z`}?5dICIY2bMBnG)^FY4TKBJ+HLme__UH3?-k*28!d@r?*W87x-Ik)J26|SI=vjQ) zP}OPG$go5-xEUfd&u?-sGNRz6uO_O^`NPW{g7F5?!4e>l361~q%Z+@wiu%1BwjcEN zzf+d}OBu0B;wwln)K!s&s*7UYEJ3R1zD(h9goJgO(|(7 zMlz^CU1+!%{K=kcw$hT^M+B~wyYKE!qFz`L;kauDr=h&IADsGKnvvRCPSI)0_wo;C zQQMbLfIgat(hHkJI)i7HCfx~{QRSxK$xSPIrLg8}Yc^S4eEF7q`(Ymz#aam+1~jWD zxt*;>XW(kVIMrqhjvzMDu#|V8sCXyQ{U!CM3i_w1??DLS?4M-wCgxB9n=u54S}6c* zUo%p$@AfdgQ@d-mL#l9IYVp9B6tp7hZuQWb%G5QN`Of-AMCI1oj7ws@HZ5wt4n7LW&28rz z5M369tPWI#4ZON-f#jkfTjA)wHe($h%qe|G*S-0*m&em(ebn|wlB=;GL?+O5Q$uRZdqy*| zaT7FPCq#v3eVM;^r+y_dCLWXVRo~cKG;`1NsrOR}aE+%B4pN00==quvXNY~2B zL^$qEO=EEq^JM%-?0yKQYTji%tg6!1NG}suJ&W=A^il6obCq{3DR+52(T7l6iTL1w zWF{+$d+}WSguDsW@lDi>cvY{b=U?y~*ksCwA^&UMSAw|PwClM z14y+@09`~tozF*8DwKKgCaSMm*M(PWcQ5rZXZ5VOuJVoYO!LdfOZ)s+l zp4VG#_{|bAp1^}to?~_td*bef8SUB7f7W;xm26Oux%^uHp5n{XEe^D-+vjwz*sles zIHJ#GxW3#FhA7`8W|GI&rhW`3?0qICY>VBi1PjGp*t`xaQ4Clglwj@+NGRcP4p<(Z&BzK@!&2zt{F)heHQ-EYhKfofgFdcnNg(G zsW)OLdSAWv84E86G} z>*B3XZN+%^bPz=(VzMzFbJ!DllCQp6c|Sed@j2coz!4}Z_Gd-?3V^4ERF?C<|CU`VW^%?^3~UL?uZkIm-qX0 zQ2QF2@(1H74pegdge5eBo9F|wdBd8Wfp7El-U^2dt{R78WjQLzMVG!2;dD%5e*@XP z59Gwcb>OpHp<1md0jQzFXtd^K*N>-e9V=PUl zPF?@}y0(FCr@OP6znjT|)0Mfq171u(XM~v4u~o;D0;PEb043FXFH)ane3`j6vE6ga zqVTcKczd^OR+9ZI&eUMd%PT2$WN|1lL*cR@;}kU|Dn>R8Wqp0>C^|ega$T(7be zJn^O{K7d(C>$2LGsVCD=h4sdsr@XpZgg;CQ7d3LU9C!f-qI-_gDZ8*XcKY%My zuWpr&;*qq)ysz$Z?p`Xh7ws%vN`C`06PsL7DoimG-gT(zX6CxQL}A3u){aUF9J_wk zaiQVo)SPanD%7~c8WG*V7H6r(s!{AO?RE&ezj3$ARoM0v<9YJ4rbX;QAJ}CH#**JG zaJ22A!0BJgekj{p+c|qUTJiB%@%>fT%gNcp^Y;!H&7W+wJ3+o0-#-(-!%^V>UE=ps z^D$&gd`634fLepEsH7;z=u3vsk#pSJ2D3q^{hCgMrpKqr?*e%5a9P;t;7`=FOogbq>3ujp(9uIu9H2 zJWMAfgE95a=mKV4-BXb%??Bht=uDh)DKk%Ifmd?_!@~Qy2lXopt|9|WSCZ$;g17Yc z7%N;miVFg=j%gXa!-o(aOv_}3lvKXCt))l{j>{Fz@4?;0nsp;_;%Z)qq)hp^s1oN@`KZLR((9%p;IX(X6&WuST4#P0i~@v3&-o* zIioA5dg6CK-t}w65*FY*xX-A{vK9C-e_NtdU|Rw+Zi7&~RgndcCyx+eI;n)y1^EQW z0VXDo3US;D==3QOfAq6?cB|`&P z8ZWg?l{K3iaoG=?NqEx5agypvVCeebyQ9X2m$PEqX7k(gV7|=dTHseWo=<<7xxsgB zlURt&dr#jOnmTCs=#P^*z0&IAm{P4qaw+9b8=c-(L`h}P-`3FEf$b( zwav@7HTmZKsZm1Fo0-^iuj^tQ*KN+@Z*#cAP%`mln{KTmFX0m|lJD;7%5b|~f}#Kk zvx*aHxj*j}L`flNqA*NK5!MO0X{Bx0d&{s36?bCHhv-W6S4{LRVpPz?;DvGmU*k)K zVPD!gdsUa~>0dO^u4ullX;kez6*V81MBr2&Oa!J}>zNHuf%3xnbv12?8$qlm*-{s* zQz8`uAg6MQ!qpRe&3?$ZWt)=!`?LRJ6FxnCb!|@{zu&*?Kb!D%fp}`!QEDn=v*zvF z>8ffQDcKz2I5w0pYkHY7-SYcaFiF}_&`bVH6F%|4I~tcze98?F6$i~`lVUk@BmM22N1&Hb)(%L)TKp8fO zMKGZ37$=|-kKfIV4d=o}clK7XWdKm}L^kjZRsj)(EUZ0Sf*$042jBxa^_5igAp+IhJ58fd5_YR96*nurY1Fb!3aM9-J<8O5w zKVMPdnbE17I)xArp|bVT8}6Un9x}P!roa3dCtH}9b3wwJ#Yf>S=qjZNoU-?dz-myj z?2jVXKQstZ%A(y0)}TudW>;X?TD^mt1|4A>R z=lo@d{#WY?9$8RZ_2S50{IAv?L5K?{ZZIhN*n2u~AW#7DN7glbVws}fm-jW;ypbIP z>F;XlBL@L(<*Ko`7Ke9^rPp6-5ol|j&s;gJgSZnY5e9x_>EfFDqF(BgnTm&enVI^q zoniJo2Mc>7&RA4^w6;ftt#q#3UzA*^(?^z#q+xw9F4XdVAW^wctnpO0+aOXBo$#G% zj<^U;1nQ%{VZOfH9%pBg&;43pA6`sNl20vrL zUceV9AR9wW9wv$#S31hPE6>&6&PZ62&OHk(qKvAD2~22pObhGnPIr zA|tnDLHqfhWs7WYU6~><+!SbwS`H&l=+`MZHk&tALAwRwBf+&hvaLF@79ac+{w;ncVJw`UZnyi;#ZBYgbggd_`=BrL z`|MQfXC7t%CY~r9!YIdi*K3Deh|7IM2>kmy*>ZB(I({0vYdHT4db>8?A0aT`6>`7p z)&A3W^^b)1I*|KkqjF(SxB@iXW*lvLJ+u}s2%rrNCcow9XWdhrYxL=Bl%Ut}Cs=U$lAtw_GAeFhhj8%z2$JsR8>)GNo10{{GC6j<|r zTsA(~>-X5cgxc{;Cs}A|O~i zhOmauH4+tcA_~1-PEB&m!AmY@DkOse$!)>X4so^(iwgGd zOgN&E-pe;wSBr7vx$-81whFGy``9PCX`y4OW2b-Rg8yQm7|RDLuW^4t#8_MaQ@^V> zPMp6?Th%Xfq8Rm3r7>J6-npTy&434r(>N03PJgC;S!|OY&d47>5*m-@XlTDalpxuCn?&;o6Ooz61ePFVDfdAH<4Tu$ zXh%}aiTM3=3_etwByRony#^AL#>M{kfBx;p;NQ#mo3HA>iI%>gimt6aD9-2Q;~C&= z2P!iAIa&LO{gCKG0cf%?)JRrKCVmXR|CN&{uPDE;u%NII-(NY2^6~r)iTIGCAG@D^t=SlsL}d(sS%=ab+752cQLOD36l z4h2m@3JX$&U?#7G{zA;S%k6OrEfi*8fJXn#bdS;2XmsQ0Pz3S^y~r@@ds0O1rGv(Q z%`2ld;i(X34{SgE*a{~dikM>hhQeG=c~y4la7S#6zUJ1Yuv8*dTu%pQr^36uTRUAH zg^0-Yp@F7%CnkPj*U>;z@Tl;g-ki=P;0_IbAGB28lr)JKaJ_strDSv9H`e&7OQQm?>U?W2+XNH?25>yTgKz59G&oPt8j&s93+dxQp;vN530% z@Hp1PjsZkl6OjKd&}egT;R-=ag~TN(s2crJ?w2GVuybEVns=JLIxQybO_?az&2kPy zJ$Ao~WyaS?3L6yj+$?CQ!CPu`+lcmsd7e{KXBmu&IB1%1`;K7DNHaI*u*am>l|cbj z(w|R3LLq{ffP=m$LOQ+;;=~j`J7yYHpI;xo*?)gV2}6*PzSdFMcQ#ECl@C<%;{gh) zZxg;v?Xtbc*e?3yX4{s|D`m4d#TQq*HWouUVe>&zoL8W&AO>-TdlCoR;gTucxfou&VypgyZU!8d`4Cd zZW%qn-;%g3!)^w95zJ2Aykq7#wk1Zv@30zu-N4a}nurY8dV?b-`=;K;;*r*C2lf?+ z%u1`XuN;waHKD1CkJb7kkC$&J!Vq%fOy>3kW2*S8VV?_i?y&7r|NLT*p8zyW;N6Vy zC8X;#uy#$4)lii-yIW;B6Zzs9t8hZv_;P6j1mWky3u?A-0@b&tkF}PYj3QQ&ww3R_ z09UI_U(~0k@r%BlqJw9N2r--k4>oL!W$u#Sg!9q65O(G2oszngRn9jR)l6Z~ zqX#AYUybLu&X^DC)XcVd)uwzs%zaNmG}nZQOt~9TQ7!UeGy{43{n}X@f5KK~=j}(C zuj8%6D~R1Dg>7C~$`O4k38mWmt~)6|!6=|vSG~G;{lkq7MYV__Y z66#qDBL~Y?`4dYVV&w5qs1g)%%M4mw^ol<+rOy)eOYf{w+}o1z6a?3s%94SCkn&J**h`!dT zY81LyMzd(a z+GVF-GY)_78q|#;1v_X^dB(5Th|-@arL|@>K8>el#mqOryy&30LlO|Y2=3`8OGZQ4 zl-x9-rpuMpo${4Kl~MiSr@3)=)2Ykq^*jntyb<5D)MCA8v-=NpP$z01s7C9B5~2WZ zxmIbv{3L&g_y0xertM>YA?*u#4%pjWba3@SZV*Tdy08cTe)%CMLBS{xGZf~Eg&ey* zlg^xW_jcA^4&LJ^r=IE&x|=N+?vQw(GfM~imZ^??qFDUy{!_E0N9u86te78d?J3}- zLk}!$Hq{Z4PxSkehYQ89ZUi$zff16QF&g2lf&%;yV)*aAo|KcHpO+Xnx37;am#vcz zSakclb9wqWa{C5&aQpfAd$?Zw5x0y1D7dMs_s;K0u`S9$?uCXqVktG@c&G`BkV7XNJ%NdUX$DQ z%h%YlMcN5qp8IEtoh~QZcqZ%fQyW@b{0dj^xYeY(l`);@z!vp3%d6L6 zT_S{eX{l@IrMEw>zLaX^*5(eliP! z1i?HBtUX2y@SWN}d0C^p8U6GR;&Mgbn0HhlXu*dnJyJS8(bF~zOUvEfyf z)LUG%8C-WwA6R$M`J&*h8E<`IDISf4T~$ zV5SHi1j`U6JlJBM83e$x%fWbqKC7J+cX> z6*y&jrgvK&_I$o z5iWhWgfbtXj?soK?5V3& zbVC&Kj3~0{M^`2rWUunzET*8R3Er^8ay(Lk0xq<_2a1bTFGVM%1R)ag_paco*zhnG zD-qqY!neV+yB8M#Ux$KN*7V}bicfM#b2Vs&bU#++D-JW$x7TCO9E_`m_ti~xr~7<9 zwgye)PdwRp*9EB2*v%mP;8y^<@tF|?@FHJrN%)xyAymLk_?usVowKi>kF$;ch1Abq zH0uA;eKhj_HG1+;wL?E6)Xy9xf?W*v6)PSRZ`6I`F0dG1;KFtZgm)0 zvSZ$Qaw=FTul_Q<`X2?I8x>%0Ux|`dx`F6RxM4pcy62U#vn=OZ(q6eNMyxh-1+vR13=P@szD_d_1Lh63;nQ_}J@5dov}(UqDku+)P! zu2mNIq^dL`gW#A((73qo8-?IPBsTLN7Abm_q)t}^69_${ z@mQ&_6q2(d#R6Q!HdSz8vyt8G*xiVv{#Sj5OqgC<(^*nsKCou$RSWOPW)4d zG8|k08zo8_?PQ`nYj{(1N#@Q7y~}Y=_$0aoUKcB5Bu}(-;TvQE8Lugh%4F{D=oQku zN8C)>$V_l@Uo=*itdTrtgJVuo>-MD7i`OQNQvONPB%bmh_u?>{8EYE3r-LVw*slAs`PQ=?Gh?l|Uh+2q@)Rv+a)RmSK0{xb`)Ri-+f7 z_isR@&MZzEcGGWrkbK%cTtu5>&J|)ZIZ6JQg|CPq<>E_xOJ_Yx=i0^xI2L|ncZqU@ zfN{iFIKvJBa=4r+mHgU)smZ#j(Q^%U>*gxi|2t$17Xtwd(6cD?R#)PG3NQqmE< zE)sRO;Howc(6nxe1qG1sB0qM=@5xv&xHg0rCo>tXCzbegPOo=4F^WhfoAkN5b`G2V znfpXrCZM3B77Mq66%|t0G z*eeN2;Jh7X`7FwjtTohu>9o)Qb1LfA#>5xeh*XaU`Oik_m%m?18x-)3JUJ#^J3XjUfi~ zk?ed9cj`cSPet-B*XwAnlvbhZ|nh%RZC|x*h zJLaoVqj;3>3xC5NbnJ^EqtQu}Ih5rZqHLZf zTtl7ZHHl}4zVDZZ0tAq2>Lw)rbU(iM&GZ<5j6*|Zxr#E3H&t=y8LtaZzYa*s?L+$p z!Le3>Nfri1UyoX4BDFAmXHcDLk)~aiqv?0!aLG+5#Po2*1$r%i4k$Yv^kySxM!%|; zh30&xRU2-ulluKD+LISrv5^eG@$cIc0>rjE0Po0(dcg zFE3C5d-6etVAj3gU3>pyhza-xDw@C7g8u+9u>c_^m^9Q#8H3xm8QFwtw5JGNsbJ2e z(xGcWiZpKU?I#p%D439cMl8@s7v}6JhEyE^-aH)t4zi#_C?}{Ne~SkzmIv)SWC5jD z83Xt)Kqltktfl4OmB9S}h@}B7f-c(Y-+wH~9J96e@U{Q_NB?QGiF^+Yfdl9^rU+@G zY2e1H0L5qv3K3oUJH=bO1U=C(@=nx}79nb-~CJtI}6kO%`!jonsMq!ke z->xDvGfKI}5PK9py|>wZib)AKU5M`Md!H%Poarv_i9*=g{EJML7HA7uthg~e_)E)Lo|~|+7Y;B?x-?lz zo^WP(D?PQgArAH2HKUDZT{0=DcoavCV0q>w=DtAdIsHuSGQCv4mmiFm{3f&ivn~-$ z_rS8-I8TcBdMhY2V!d~QwgX*@E-+L$gp|W-4_q*a9 zRD9Vwq9bj*hRZBzgv8&AJ%ZkujPVVE-q5-lO(exFoTR>H;6d*bj><1HB-o2BiUG!n zNDHEH9*0UD zv+tZju2t2!rU~S5g&Hg*Uy5dl|ziKusv7ROA9EPJ`K>G+bd0}b)C z7@tlZ#tx1<=jGp_Gr=X_do*KERFA6c$~iHrwzATiR|PNQfqK>JwTyZRd%&3%1;Sc7 zZ_joRg0F=io_tj{v&6$rFauS5?)C9q@3YR*sE26ZuP#S0HL*b>ru4e7lZenKq#g+# zArA_l;_f6+Gz&X=ARgs_t_-a)>Bz7iCVMnwANMdEX;nX>!5FK#OSf>Mae#427ggEB zjjLyUma1cWS->_)M(G(V3h?5O2F!>Bv>#%{7yip-{eC63E=}%c48asUyHZ)OM83oTE@Mpew>yR{faTf!Wda&UOsBRH2)YA1BPx0 z)ffUogWz1jubs`=h7vLb>7O^<#G}7-e0R`j-Ywk)y_8vRY`}<=I8HC%hqp5MQH$Xu z^~#Y3sKrq5Tl;N@l3;n~SNkn2`XafdxVXw6r3*Nz*Aung%b{efU2A*dUPwv?NdWZG zhF zENf-1CAt*_-SYwMPQQjOO1CXFP!!rc^CzAdu_Xyks+A}xkN;8t9#9gl2@^0|e$H!A9|sBS2A!Qh?2i02`K+x_BxRRZ_*=v7Jx zz3FeJ!0Z|{R3@Jn+9UVy9$xb6xZ4`zBR2H31woDWj>C8n{UqO}*w43LT*Yry@IMmrI0wKs?r zOW~;oqw!lHc*)*1kh{W?#H_$@ubo(b@4OCkt4jq=qmsntJkJ`JDH=g7yz1PqfIgQV zN9j+P3Yul$7?w&S-lX5Fn486*ax>Z^cJ#|lStDA|Ead05TCs;k^8G26 zBaukoH)(DNVK!>PbJlsqP=IQ%$N`J{C^7<#bqX+6O$|8);;G zKDJ-{8^lksA4SdUX~azhMOkZVV_bjFa+9Z#idEg5^Bx*$MntE~nr!Lhgcs3Qg+Ex$sdm9W{1!2Mk=2tc8c|2zTzt5vj!en7WF@+WBsHLwDqdNz?V% z^I$6Rt={qnQm*#4Q@sZG3vB}LxHxstzZOamPo5@Wr_Lc|&C{Qz4u{5;E6f!xP-k?g z*|^Zw-Ag@bJwv<}+S>2t{U0)lrE^wx+66ClC0v~Zs6H< z=NhpAotA9YfK|cUfl!aZ7wBMw2ekqW9~j^3dM*0dypld7)B6DHO2Yl+Yb>e#gXWgb zb}NZeBveZ?Mdy-pRkTJO-c$a)wbWPY_mdBOn0YS)MFZrP^5GAZH#sPcWO*Dd;BZ_x zNyUcobU@vs2>nj-tT=O9&eWs0t8vWxA182X*=G3D3atn2>`qSNnd271WHLLf;{nN8j~{f{V|yw)X16D#5}R2NoLrvutgs4El}@4%)Qe7^{*qW5<=30}dl; z-pju!q!RI_c}Du4z#2{_95hJ7}(dNv7(+UPb91OFb|#K+U7@D&|L0pLVo}S^Lvb zlhGx$--RlpD(ra%zbO%Hs#N%T_m!JfNQem}T7I-ObF)n14XeM(u9>-ZFKg&GJBbqu zHbN~McuVE+j?;}hx*n6(^W(N>)}oxr_wz2W>l5MVJzcS#$Y8bBNul5eDlo;|_CO=~rUt=5v1N5Yo^3cqDwwBf`0ttFOw&v~BQ zc_sJ0H}qag;@nB03;}OO&PVNj6o_gBkd(GjHI4y`e@;D|mKA|UHO`nRHJm26Z)a!} zKg4)KHoWyYr^o^;S^1rlYu9IH21Zu=EkLh96{bQ1jxs1wlcGKjSUfSlDmjwN8%qS8D(%v` z!z*%(Vd-<*_RSTHRn*QTfw+|~FFUxmlbR-U)mAfKFkMTxH+xJ*t#ae}hD)UJ)h16- z6+t@Gz;N0|HTMr*kEpDyZ3oSTELn)L<>UhwBDvDH%1T&r^wsK$$*EP{UvPkaSIA4f zNoWB5Egct!6b&=|qW{Ei3_;cj{MKgwCqVr7gO~v3Yj>3>sK73D*cvG9pIzntLE)o% zekgq*Fz4ZIEW5YFFDtuHMRCAI->_SY?MF>#WP-Piq`~^M~aEej-Uq&Aeh>eJ~Z^?g9{yLTA5P*Uxt|8 zzt?T@?oKJj!HM47cZtA+<%(;Dnj71U3_d*i$n2VFyNN}yB3)KnJCC<}gCj^n(t$;$ zi=)}^i?n>SVb^AMDk>I0p3nLxnHUJYo5UYvVm8)5WWmJ^RD)v2m}>VPTabq4@?#!O z+3B^~=$3TG2VW;4n8v2`g_Nt#swGzmGK=he3ZKFs#ZqcuuXkzNceg;5u?Dryhhu_exlSGH+v7EZsQ7P;4vvHt4iy z#_u)B=x!QLV+U9M!-0^73jwm@KMfZ~lfheZgql`crXE1ba2fMPNUhi1It_T>v_0T1 zuT$2g9-t65-IXnO@>#x4kGFJFes>gltA+p0j^mU@Gt?@a#BW-&<%+%Oh{Bvx;&$v^C4lR_YsXh zHWNboP~?lT^7tKvM{h(GoUP0XIP^Q7#0)nX(hn&}ppTG=96FcCVO%m4 zUUkmBr69dip#i?CICZM`rP5pcQEa16GCytqsNl24sje?YE?@TWuUg(^Y)vd?I6P9g zbxCoq4pVJl96vobuB*foi_5DZ$BVZsTg*rF&64gJ2+@g;j?inK(j~fly@4`MSWQJB zgwrlmz4Zfm*B8k&m-3HSL4|UCSE(7bc4KaKx1~o2nK$_1FnpZXG^6BBUO8dQ$6V*E z99_~6e;39>Is=oS#bXL9jhD(Y;KW2=$!Zqb)D-K zl01SXer58<%PRXQkNW7cAy?~PRmpLiGe8Leq&QBWkXs9XPugB4Z%zjBeZstkrVxkZ!d5jf-t z>qKSQwsyBJMMnqcp#i*|#K%M3`g+uRcYY2F{`H$81p!I$sKfa#hc#mYIKF1->RwCY z{%<(X9@lD$A8U4IlZ}Sw_etMNcxJAS*a5AqBnHu5nX zODHgze$W~I??(G?-e|2~z|qz)Ii=SyG!rJ(bxbN~V*R{5LR`xJWiG5~_1kk=<;E+$ zVrgWvKDZyLi!U|C-abU5x+H)x|3}R%RImY=&tDXY2P|h9n{T3f8wC$?2X8Rxc`4-O6^w<=&V40;YE{a}$B^ zJsnpI?3)iVh|#nzH)k|C>l!O6k=~(c!4)0Qg5rTt`!E!F2OlS$J~&F9-Qd&T700Bl zZMB>}{$wEko2Uc;7u3~6#!J$P)qvbR4ke+jr>a`(_dSfP48qvur#~KEnP_{uPS!@0 zLHsO(mBJ*+Xb#DyGi%ksO(=xNX8=@KAsJrgiW2 zt?PHD2rpr``t^Mp+d@HmWaMh`pt2LgURB?rD%7*3EG;LXU{a*I?w&RI zCAkvH%p{{T#2A@qDhgqxJjc>KB`z#Q_OXZ$2w=9^liI*vSV}zZRZt0S=^21UN=>VP7E=VS!L_X^hCp)dPdL;aClep8~!LjUwkX1 zAr9$8)TnoQH`t9bkMonmb;S(dHHthra~B1Nu=>Q_cYB1^5rX(nVMdkQr@aB9Y%g^$ zyfm^@2ZOA2S9++J7wDT=M9H!6%GL#>uxL@M2#%-)TB0w*1!Ah`AQ(WXkSpw_IWOb7 zX@2%CQof%m^UYw@BdbbF71pY8lRku%ex-CfJ)6}k)`kKvE(rra9mkGM^TWOnDYe4s zmW@=|(^l_8K_z0}QZvcj5Z_LVR5pxzJ!2}mmCuR$e06R4hJqHA5vv}&EAk3-mzcWT zYi#B7&|Y)Kw+mO^Bch0fzUNtkV99aipx3nUb3ep*3l_GEkK>*t{odZHI|EhkK_9!Y z3U|OP?(*GEy8<}&(hxejJ0}tOi_Gvv>o&AuHXNHXoH5^&Y|Z;QM~WlC{Ib=?OwSs* zFcHpfhcU{B`DA4iRh5Cqt5{z$in-VcwnKK5c}fVc^6qlFmNu5b?#w*&if>p4IwSE{ zK|^VJqH64zXh+}@4*}}=k9zXI$?!Dha3}3{iR^yXW(v z5Liw55H_H2b8(SL);(>_XTCFO_<;0?1J870Md0vAN;aNA z*@suk9P9@PsWN~uL|J2qU1Ieg*#tKq=wVgnJ$7Ks6#3qzSp||Y0U;6zI_bn2;6=EI zA)#}ul5(EiSc{D5n-(=@WGbLJq0~U%pe@^p$$uVsX7U zyO5$KntUde$~ZibLxdJH1;&7dfTctMBmHtw>sY7+7|M(UJCvae2X%Yxq%r&L#^;5@ z-(3N8BrEPub$EeLfMUs4sx#{@4~k2fZJe58 zXji@r(z#71G4e=l(HKp&iwsQM>PF|0%AqiSh(u9kK_a2nExexAWS> zhvrx*?s=DNQ7$B<{tK+l-|5c(Zxujv!UfUR7w|$g60~M}*g+V<8QpHHaCiHQoA*$! z*M3|ef#hLoqcD1Dk()p%tRoXFD6W@mq>T70vqn2)71u4Iw)xm9Yb~Q9zJ>t?P-1Wb zl@t--WqJLrwPo`wxhkt0Cc|52v)mF)%sy{}b3xLb|Kcjqi)v*eaq1lBvXpZXZJy>@ z6D`p1 zN6h{dE!ec&@hfIu14k333dEEkBR&e@Y&y+7(2b?3_fn-p!_9@qQA(s)xr71q8inZm@N3yvvofn z;R_0;l`^Gr{!-!Bsu~d)BfR(4VvvTcJSQP*wId@=t&_{buRv^Tnt&LztGR7}Q@}$T zlkvPc>mXmS-zEzVd-gO=`>Ygsl?AF2`O-`D)twfHbLylx4HNwze({LR!V9P)83jm~ zCM?eEzA`|cv^Z(%`b?+NrTFfpUZRFAc;%Bj z9c-FgZ~eB%6Svc(uc{*NXg_|`b}x-yj%$gav(i#LiW9QL8=!Wboeh*K3ko;1)1KOr z*E4!>n&M6skblCfWPc(EO7_FiaZm-G6Ke!?+!5_rFj#pk#XCMqGMOE$wfNTgS*VNu zYL}|8*_xntPjXhD|O+L{PO3y0r6UL+a-Cb)#SOf*PmTfky^Ynt7sZ2V237PR)w zt$XN50vP-#M9LA=V?e=xyiCiQ9msueDx%?6ne^_q(7c32F!NMXv$LSq+eK7MHgO^2 z+SaP{E)mZa*V(5t`I;BA^z~UjA=D~;r{q}wK`IgaFSj^^<)^Fq{p>? z9)u4<9*US^?8oXLRjtD+1{bjVN#4m}0we7Z+{*70^dgeOPcCB>r5_9-zggfSELuVN z1XNH55|dg!iah%NvGm?dj&Y6aI?vx(;GT*ip!-aN<87h%i>kZT zTS!rM1wHMhq~^>#oXq#rgj4Ag0^R9fl~gNODF#W1yx}RwKDl2(KR+J_k$lnuZZ)O9 zGf4iwxUE4i=)IR)s56=b$53=h%u+9-^7Fb4H_rL`#X;8ji{$i_h)$+`oI6h*lT6kX zX_{1OxSThS10H*Sx_K0G5sz&~-t|X|(uRYx2nn^^QHb+2TmSrYU`Y)>^ z?0=b!|K~Fsq1D!4Cor0d3MP9WFwQB7R!#2nd0^%f(sm6uu8C$djL+&e4x$g7>FIJv z{90(>r~-U#aL@y*)f>0^a9HQAF_PT0M9PwhozML?)L)ZCJa?Tf@|)5YtM^Hp`x{|X zvvw9U?DLojo{BR#M~1J)^|LCmmdqTHmEnh*<`0>U<8|&xR^V=)=i7oU4f=GNf zZs*VVBD=RXhg4cqM}%_=Wquepp+iK*tJZLk4tcP1^GIWU=X}#tP*)>7RFXVVzTRlu z8U6;LEN%#0-4psg&Bf%$XFd$Fmc=Out@n=8_@tL{@BrvYuju9yGHPX_VicPMd24nE zGu-}v?RjdLTcU{_bDaF_dV(B)|2>EP+s>iC#Roh$K>|+V=q}ot`Q#efW zkXGQH(z8|=!^S5E)o*Mflfzj{+vtf}{p!SpB6|(2VVI9%is2Y{IK96alHG7RuJW0) zl?&9n?Q1ZS6UYX^LXs834`WS(Z4klV9au^?gL!^bQ2()`-#}YM2dWBs z`c+l_6ovB#M?cs_!UMZVFcbC-OAu01n z>|Em+C=hym=WElwp}kLPtJ&rD{pT8;;b$lGK4%hh3>I4o$SQB(nLkoWH_r`MJt}Bs zdY57;@@>S91my)&tg++0;|vRoy^^UFD@bdKl5Z^fSDc$i>|hD`4=nvU;qU<8f8yu( z)mQp;n`Zx=;LWfa9#{{^nrH zf84*xV5-3%Uf{r?5d6`iR%lH*s=RgBnRYOkY#*&<@nm8G`w$-a z=~(q!y@hH@I5JfeB84imp}O#o>0{-(#X}w;b3S@lxeI=@!ePzc-29q8$X(VW*v!)Wo++8l!5k}j`SHtSA3?K@Z>EVONA(l5JC(Emwy289de zSoatMMUbF9P_DR4L_#+$TpvG3FB^rD+BDNI0ZR#niCtE?!A)MUb~?g}u<7gS){Wo2 z>b5J^%fN2}b{Yv8#_STWqOOyxrl`83e{jn!{)h@yfpFZ14Fc6$3NG7X%xceF>+15k z#oEi0h5Jda)9yCqF2e@ICU3v)Z{Thh*dpDWJ&DKhDd(;wluY0<2551|&-IXJuW?-V z_QU`}WWXbyp4?5)8HlP)adXX1UTHRaysGyWy&ouwme@^TjcSI&KtKxCH8wu3Md(TV zLijm3Qzb(6#7M?KgP&S0Yvv>E0Ws@X^c-z2s;<~t{`-=}9DPCL=i3c-Zto%kxuwdF z?xch`5I#pIiBbwNm~^zgV;#f43+ro;qq7cBFZks5z1Y+q2EAXeyo^w|3K7b9 zZP$lHmR-f?{a*3yLOOTPcuOW-PQusm%0_JpcM*M_NAFX^-0d^VPh0Y9JugN_ym5kj z_zietw5XnS^v}U5lp#E&Vm8XH(?=iF_PNd8+34*$-D?bZ5*$U{ZGIfad@%39w(s1{BO`LVQCd=-^}#LDqT=1X-4N7`3;2#OW%yjsgH-uy`so z;3w?_teW4K@FBYqUs{lKO6R=sQjqCG$+uQy6i}>>6ecC{a&fSyKJ?i9W<~tT!Ku1g zy$btMWFFMSlQzM1zxPb5=7VAe&!?Gvt>+CXYB+a%D{XnvX4eo+%((^G_Kx%dniAHV zwMXXF_Hhl(zM5B^vNdMQSM|JYgnP0L`Xvy8d*LLDaIgUa@*i`S{hjPBe(n5!;4FiER2s04>c*{h5|?Y0NLMN~ z#gVGM0l2+6MMl9bh!7HL1|jMa3F~QZPax8-xDWO@_siPz4p4PX85s9O!%$+(gC=Rl zr{)&wtaC^AM|RLsMPn4gXb=Xx6y&u!xqnO}--^uMDxt9_$u!z>_}isMd2TpNS*|CF8XYpkqaUlmC8T95WTcl1X+D-kLr5aPsw0@%q5x4)OV11YC>XMI{FxA?3$$ zMBeAp21ip7zxl;40KeN~cGPq1Tnv;%PBh0*gbkNfZQ>%v;@dLhdf05lFyVWwui3JH zkZ8)5n#N9H-B=2!;W6i@%6>@g7lP1bl~u_O#UQUhKU36;N4tH*59$Uja_YKGDk6Hg zXi$1e>;0#9RF>ztu1OnqhU>A{d8hptrO*OkCVCMDJvg>n0PeEln2WEx@uq_Qx<#+q@t!n993~+xgTOn(+Ce@r4x$djSJn0hTpU+ zU^ZRd)1Vb!5x`JBvWteT#0qo32%V1>o*87fQo}|*Z`Bw7A*2_41H(|synzK7?HcLX za;J_47mYiH?c(`mEOT6I!mC_~M$dO+u5a5FK7M}|t50pySIYP7C@U;mMC{o znRAVOo$EdYT1S!Yjd14xFa$4T)D1SJMO0C|eHDV|&wk+;2Vob&m;kL7mUf3^^Rw#f zy!y=22NKSV2%TQd@pM7tnJw`ikM|Ov*`*Alk1@Y5Fzc_f_mVBGtnoEG$yk=DlqL>< zB!|x6EM3D|8^Uq3srIm_jpYObT?WkE0IpV4r|$KGsfRG@#V&Qsbg*c=dI)aCLQb2ETsno?aLH@k`k156H2ZnU=N9m3zaCn}=JN z+l-r+i%VEoh?hqYdR2G9>52 zYx-ou;TN1Y(Z4S&&Wd*?eJ$Ss0WgEBI16V+b=Hb;5Z;+RvHf}eYBl8wLY=BA&kEUi zJ=H)`ZCZzy_19my=hHf5Pt1Jg%7DsArDA=B5!{y`;(B*|8Rzf}r5A-MZH%Ly~J?WZ#N|@S>s@8CT15t%aCrP9h(&6!9Ic2GkG6HtztW>XIrDq zh1$hf#b~3DeL&VVc0_P8k`Eg1n~w+>5KjSdVWd@8zLw#%OKvfU-o~P%CTcm<>5&_g zC4A;lQsx3gv=1r;ewMk|?3tj>`r@OERp%2=Yo1pXpZIs&c-*U^Hxmg*+0Oc!9CR$* z^L>@C6B?^}zodrSYE&d^K4UuBs>4HN{4T1IY+;5~VsmNCb0|uksZrLoAf}ZPg7&^} zmzektxqq0*qMdcMHvWRn^;ZM(pBbM*oZy&T7|ITn1`Qx;uHLsm5X~Riy?^IO+4>4z z08y!+5}LUHu-0N&pT(CNTsoWd!ooX{IVlb&PF+ge>G?yNED{)0+Ti|l>jRNB9cJQ> zboW5xj06(G%&W7Ph>rP1s^1=MTbbQ4(S(aMRucX;^v+Z(Be_FvYcqEJqiR3zD|*XG z3>^45$^@JbD2&!~ST%YymCuJ2?DwC7rphX|QUNaUHwdu}7LLRHV{0OPi+0HUwQCl? zWiDLVZDF97#l6mmdPd!XK7`lLzEGZON7qlbdQAf$lmc2TI)D<2cKb8 zWGcgC$1%IDm8iRYYG-+0l$5K&X{m8Xf(?|capMmBAMLgivlo^bC}#gx<}$%q?CmfZhl%5Y}XudRe2U@#2NWqvnJ85i#It?+AT=D z>pHGMLftfcjY{7nJ>+?3fA;1BjujoF;*)d5bjd9$(|hOs!!(O=8q95aG=W-lSn_XI z54y}(-{7n|E^dd{p_|G4L%YoX7e8HH(Ab9fuP*w3<%&}CcDA^vXD;_LL_mcYL&KbI z26jc<=`aB|fauF=FaKEzM)Ht~(r8BSAu%GNGlVddR3lu1{BmkeX(Hb-!su{*uL;}$ zs670e5kOpFb@^L7%0}94Vkf6{I_LOYi@A#XdH2&EoFq~4JX>ps5#g+$G*KqZmxRhX zWa53)AQIovW+O2S81 zEx%AZ68Uca{XNYlPDf+|MDpa*iaWT%$xjK}kkP*mqj{);K@Q#5qtMDK-F}dd{U`qk zeDJsJO+{Wqg;Ppf25RMP?!@l&gT29ap#%~J3t4V1=*6z5(o^W^@6^)(RqLq$S$K9( zYcHs|69<&Z(;D=`{eTgI7Pvp|g8!7X_uEU*w)U{F2ZINkU9G&GtUdoCx8A=5WaP+^ z(j!h1%SCV2qgj2|U7TIvtF!PNPt{9N~R zBV+m!2P^N@Qko`ZH5;r7!6EQCXgznJG$t#BPr*v+H3}s_d3!3#9A<2s(@04+MqEYv z5p+vg{6+`54gPDVE|7T2_!5rK+5|k7MI+>YD`PRH6 z+=r{hui?8^t)9~4vK9>f{4T8ZV5iYOXF9^|HAKRKvp+%=2(|27@d9T$YaafjLl0P_T`f z1NOX9_?YlLciEr4KzRed3q+Bi=14l?FmPctqocs})NN86lZb1+ZYa5k4DEegZf50R z7dK@K!BQxn-)$`PeG=!;IeO;gG9AJn^$>!1?CQW;uu#TrAzHXCVV`G>)iaMKo zD>`6n6@~%D2;mF`o;8m~TjF;_pa3yHHgnc~Bb=pz-xMf%)s+Uh)dt<|oM=l*AIRh%Ml)I?>QSbCo5}vboiv8SPTC zI?fHYcNCN+p2wJZ1Y{JMXpKQ*>zjge!a8%qB3oMa$`-;d`dj}XdeRiU zW@oGm<(O;Ph}12U^zPn6i4viQFQ4>YMZUT?Zl5^BYfqjTk!~c z12o?&@XQ@CK<4LDzNMET;OnGZ%yl%KZWz!VR~m%e%mZsasYL>&Hn z``wsmfe-Vi0x?)@bui*(jFj!aDnN}bh22J{zj%WbmAHinjjjh{dr3Fv2>eAKl2RDV zi|nf}>8F)BGIlxlhdt;i*-;Sj2^^ww9FHU^KabpP@0Gj7?0@jC=;k{e&MA7MSKsEw zBWw9zIdt72?tfYOX%|mm=MilMSmTi*V)WHDJWlUH=ZOw{uTC3^>an-JoFgJQ|K)mM zG{XR4oc@SUU6VCB9F{@`92B6kBIeGaH8&SS7&XO~W-nIK*H=bL4_{F_Xw>&N-3!PJggN6sWa?{qP;YU@N2$n;UO*wN z$YeoF7G}~8-%KPwk?FUH#ob}-pi9YxXvyP!m$=qfC-rE4iK08YkoBAS*lKp_Ip0e)_+BLxMjKz+A9c zl!~}U4%+G^UKBAhC#BPQUZ>7kQ-(wS>`WY=!p45eiI9i=l6LB*l zlV*Ikay;fdyl72Vu$4&^(-BD`nY;z>-hEF2$j9_$uPsd#MeeQS8xRO!$jxWHw(XX? z?!<>6zmSMadVWm3*?avKQTe;|5eIrQ>QTt4BoYvu ztz_iy$T)Q(5q{x-z^$NK@@LzaKBfoFvYK!rk{?1n>1CDU@PuxD_LX03-59nSPSpR( zR%W_=W*uki#hAIl!I7$cFh7W?b~}5!@il_d(IYz7Ib|i>P$8Akkm`8Mo~2X$BF+^J z1OS0oAzWDQ3P2ed4_ZUyiOE4EYc~@*RMGdn8?ON|;?qzE9OK4SsJl%m9;`V{eid9y zFS#xjlS^iQrpgNvWQj9oa|rIa;{k_x?-b!%*yVB(=Q**Uta4({3+K{ci;yNje#uao zhsJs?0*443_4pR`qiT#@T?7Bk_0-b@HY6Zme@3zlsC{oq6OCWwK#ccoY>~{>n3Ixk z0!NtP>3vTCCF0hx6oGO3Ee?rrCf)q4ocsau24Zm^vG=)xAJUO;#hRgs1pcMciHMXvtxoOon9JvxjwYN$uA4JP*|&+{f4}0K z7bF%Y)?bfvU#_$#px{G0{djzxv|tR3e!5t6kMMsjy59`P zf6;-x>YH9Br2goE{-G6nRhKGAUR7$pPWpdQHe9q~d4J!Em9cg(hw6D>zVZL05BrD5 z{keGP3I|oWrCSas3>zu7BP|F*#eT%66KTGDlolO(rIXmHE`z)vsia;bTcNETQ@LN zA#R3?{;-Q_rHkPHQ}4igm}fMgqs#55G(3#IY)R<1LiaJ)M}Z%rpwOtqCo80Dq2Fia zQyHo(_Tjb{sl&_c5F8uTTL7IFaj@t{;a&~@RF*t#R`k0X;jc9OjB9nCbDP1S5^x^a+<`IW{}@xIuL; zK7z#B{bo3gwP=-6x@Oimp4*f##?-F_AjN;l~4_>kIUrjq+AITd@7Q z4Ri#OQcqLCEKhDes01B3&qmMyb)?)#v}vav;*Et2o2<9;Z{d*;o~lxJx>?Dl?A@;* z@*gy^JY0Falj$E^b^di?rdlq5dC zrm3{9BPZ?lG?g0o!fIt-SaHqH)fxc$-Y<9>20z3n!&InFC^11?B>f^m&+?8UHW$~j zM@e8Am)$_M2@thPdH<##OLLOL3Z9rce;&y!v(55NYh1NXt&A-3&4QxK)zfq5!tF;% z4pUwLB*GGx2>LOj-`>^+=DG{?f<1}^o_>Ybxfmcq;KZ0Wb`5UCnq%ttVq*q0sLQCG zVmlYSPft7>-I85P# zrE>hMNx2k!O_%u2T;YE;6t;+R77JN0OaycxU`7*$UJia4BNnlKZ0jM=E32phR;ob%Sgbp?RC9kWU(9+men;&hgJTMG_Cmn*kgqxJd3@_1GI<6Ao7 zZ;lFfLvoA)ZpKrYoK--?=_P|}!I?C?xtp?eXW{k`Mi<#(G!fwB7?&>TiY(`BY{S(l zIEL3btyv+Pxc11Ah&rtAw%aU{43m+&B-zehVin7NSehhTI!jQ|)dXqzEBJp`rlx>7 zO3TpQ5kFMt%y@adr6iGg-4GMmi0f=_`33-S#=UrV&B;WMQ>WkE(r}yM0_eyD_@7B~ zh&|7?74Ii8iV>J%E8*PoW{KpTC_?2=fOMf$Y-083Bn0*}ofOSu@z2!ytA(m^GI47$ zinN7oGo!`yXpzhjMFwYd1No7*Bq4%dWFUYRS$CG(3k=?MZi7~_Yim)q9&G@>CfV*a8?ZViiCP5C^KMd9i#S@DY965nH@bJrFSdWU*vg*x}p<1v>@J)$&b2VUB8?Beyl*Ot5j0|qd6)aP)GTCMy&9ve+uDq=QSP91+U0YlYAFRnQxT6*^20R#m!qv#alwI7i6c#d@6LY7-k|?Y z1%qzIe^M|A{=Q(4^sx5%Zz~i2@a#XA2^T)cWF$f|4NRn+p62HV6;}9~P7qgB94>!& znbupm-?LD@;*$zXzh;M675ums@sK)4$j%nU9oN(UOMnL1jl)#Jk zt(FU2`MCAtke?51v&76I`}Bn0bliK1Qk|eB@^UO-P)>^PW-Mw@8#G zi!|-unJW#LQ7|EKGxSNRJx$%1-RYDK-+fBJ&k;zMm!^UY1&qVP^>NBY>L!C;eDYnE zEvjCVM-hpYn^}!VYUYaNzHMku7A&O`g)?Cw;IqauzJ;E%*bZeml$r~|UGYOYLdp@f ziAP^jB2i97s$-6IKqtC9;eWfK{Hb&9>22X)Z3)UoTrV?eY+Rk3TyI@OJzKiESlM5M z;{4Uv>VIm<;0wG!214Q)!7M}zP;;I|z`9kVcGt{d5i#P~njo>ABv$+G0TloSdw{2E z(8dRe1hh4!z3z1;IZ4M*xK*dh1nKx&^xSnK{CyNrY(OG4TILI}Oexa;bD;C;gGS49eiT$|x5Istx zaXmy}VwT!acMg>`)PPMFkiF_FyktiLEJkRkE=UDpGRz4%C*|)ajRjg3m@Uu_XJ@ zKWt6`Ci3oEFpyKHksGC-tbcU>UghbW5sx_n;kJ94JcMg@Jj879mhT#>vbDj80BL7aUoT-sm#gT_Aht9L#=y8(Gd9l4Tp?vl7i;jC06 zW1w_4Pp$c>cgn^TDrO{Flr$op17;WmkxmMFl89>pX$H5xAA-Xrtm>DMR8GbRiVddH6uepg>=lQ z`_R36oGoah8=vA{Oi`ZAItH%BDZibDrwZL~%{Qv6@!OMCjL6ol9xNyV+rJ+OgW%CrTYp9UmxW_Tr zUIJP)rF5CG;EOQP{lO$g=hwv1svuiNpG+V zU$8TdKrM($#e;`frQp7D=IOfQ>%mpY?4G-+8;&a{C`{;z-umz`^IhP|KxJ$E+j0@{ zj;7a&M1c=2n4@DUPTXUwpYS}6f8P=QJnymptkQb-Tkb^mfyh;B?xw1$P9+EUo>~OP zCiNEs^uDT`I=6}@>6f(eIp5_dlOm%c7)jfk5hLHL!)TRV8yQ=R7p1`hBpu5uWcF<` zr$en9r!;(gx_-#vE4%4UF(2qaUj3HD_wSYiJb&Fk_`la#68?QTAaCvB1%@sD$BlwN zJnqjGKo>}Ou8*d;kUi%=E3pHGFxgR@$J#<%Sicv-$u!3 zjBSEeBXTVXH$(T|TK5vQ$NHFe4|{)jy&_FOT`L&E=jMn%$Q}MMxyb!%yoe1+L1c*x z$$i?;hj}<1v^V37;^-9Cjmr;E5mK*98wf+qs+T!QIvn%5`eOo><8|3K$E<6MjL=>i zJywauT8m8$7EI9P?Got-MFNy?R`so;NpDH;%U>N*XP_=w3!RZpBKjc!(Bde`P$wDi zb~8ZUIBdnwSD_7_>Uo$DiBON(5+7pT63K^gi9Op1HzrYj8L(-#8L+}?EDpum?%jZZocX9-fIXQ@T(InQVuY&yiew`}62xy$~qk{$XFHw7w81#-87^2dOYOHcy>UG`8rCDnNl^tE#S=N$i0g$q$v{ z3!}NV`+4N)n-?m@z#iK)5!Nt@2K)mZDMtqTV*P4gT3{$75|kgwg$Cb9(rxIH>InO_88QCvX7vBe zX7ta8i`;xaXCME6-;D(7uD<+#F*g7R{@ded#)}00&QwoZ>2q zQnFf-I*RHbt3@4r%vFNmf4q79;f4Nb^MdsOTM$41Pmo5!Ra-h+#hN~ufln$Y?*s9J z#V#gM$R}t$RMW~wRE`J+&jxC4IDpr$RrhP7dIFrq8}&xD7dHCj?~2>%PV|OOZu0w* znbTbtp*wq6WhAl?TSGfWzcRt}EKoz$iG7>RGe$AiH(F;+a+Fs8grMnVc_6>v^J&cH zxwrgUo+Vu=*VerKuJ__WAg0q!$*jq$dft7!4(CS>?3+#Ors9+m26Jrii0xcEtNo^- zAb5`w>7Fcg4W8g&(4OD8^auvGDr2)acjFNG+u0bEYOn3}iHAeT=v!TJMsP$xyC{SE zkZ$o&7|9tk!ai`rIT5Zr+^bfhhr5qDVMvClU?X<1v z{fvgI1fD_wb{X16x0JFw*;x zLrQ()OikIK`zltC@T`zxIKbt`4MZDoSHEAnkHygcB(E`L@b%kViWaB1g7~!7;pgjm zk*{MuRUuw$4eFId@d53Ik)DL;`ut)~nnmSiyeG%j#;otqY}n^M!BJ#Y?%R1&>B8T@ z_bF+`E;rr;jtM_h6-{M@PVVjK8~f=osd5)XyAN9`41Et^J>FkegRvhL(;HBH_75h) zLCdxr+CTxX$ir~v3dz*3ZhkeTSX78nDbit-dZk?;a`L8`!Yq2YBXjG~SP~Qk7@j0GV zH^@O92wzOMMsKI1@^kASxk*~j=A^klMOou9U(ZmkD(!KsfYHdM<}#qTljP=?7=)s5 z+L_)C2?og-UOXK7HA0eGaA7Tj&hD?D+wgEy1|!7ix z&FnOuKPjXHiv}OGL{KG+Z-q@)~`g-xgjZ@iII&*xc0q^!bN@CS$`U({a z>O&IO5R+e*sua#&&wWHeNsNmckAx&A-BqfMdlVt>aK7)Zz~1jN$w;Z@nS2kM1du~) zeK~?TH%R<3j4cGrP#y)=?F_n$?fKSuu)GXEOK)7i$2$>;GIw-c6)Iuvsbi2)NuOIH zy;3so)sd*>{6iQAOSl*TOO4S}!lLZ}=m)7ehDEcG!4G}Z%m8&T=M8BgmXucwTS(2A zF<}bi*Kln-XdY$w-!~!jv^Ku6mUly)Q@;aYQajGY9r_EM zN8S?Lgq?c9W7wlY+I`Rc-$){wnctc4x68h@uyT(?<{Jz8h%Rsc`);=@TJa#TrxZ-P$lQeI zcTC2c-^*l}>BBgq?q9D(%VO317$gs4zBoEzQg8=o0P>P7m4x~NaOY0eYAIL2lJBb= zlAyhsc??CGgAz8Io0Qk!B!KH+NMGz`j}-T2aYUB1Qr3Hvl&25$O}~gArariBa6+*k z#${>9ryF~8Zu%IR7mWb^-jd{UWKbAmPjInyMp~D62Lx`1wAl`;Sbd){_!gekQM=HM z2UCWgCbJu+)xh5wOJaFvw*cb69IvbXmtH@Yf2H-<#q_J=Wi@p zkaCXR3`MQqHemD@OPD7PIE3}{8ayVo1)v(y(|}B4TKzQhT}U1K@_ceKVD2uF)={_x zMqMfdfeH~e@QhTxiyvr5ijObdm#}nxWc;{q(v)bK6rUxKSb_LneeoP5B1E|qE<^Pl zNk||Vc5$y#`AI{NLx$;GxyivYR-lV}ule~%FM&!#o#4=OZ%eI#_V=IM)mhhira1c@ zp2yn}zS|z-C3vnBmS8?KK3)4hy}J%XTg~b38AVLj`6~tIF17mIMO=^2HvwG558;sAH*ANrL z65M!TP^b@+E1^^uQ3l+AZ4O1qod9&WyFP0tv;J9SUZ$$Fc@8hN9XDH7NJ^RWG49qq z!ZmGUcMUvlc<3V>$9HPt7jzQPrm;v-m0q!ayOM8Ut$|odp3kp`&AQ~b0UrcL$If($sedje}iwayUt z9&O)@=&-v1$~ck9xFVpjSoFUl%>SF($hP2!wmTfWaVt{*R?`KuIK6#2K@i{D)28S%$8q49cUjR8O)hfcWX?vGA<%%I{4$w zwRU}?v4c}3$`DxF@U2BZiQ^_Oeqj`hLsB`n`2cgKx0@Q**yY-HQ>Y)1eQ76Te96a- zh1!dwwV-Y>h{D1kxc5PJN5O|04#4~IHGmGzf|KkB&<@vz3QutNW69E+(K@M4&kEHc zoS>0?ZCf`Elti{Ly0C8dqv;YUR7mRWoM#9+E_0M~eYwFqFB@7n#stZ<%q+BVmEPED zu)AOw8Kz*REv}>1RXjJ?eJ&4=4nS8a@4@N)S5sPQ?Ia!F6~hh6!2MUZFG(jSsFuC0 z9jN=$vi7w0@UgbKgzZ4_lCJuK|MjwV`AIl{!FS0&B7`A|9KlN5N!q--_jIM5oN&e; zpzBH)AT+0J3MsfX4RS;qlo>d31omK^tGVydv&!7f0EUS*)K=mN zQCilH5g{P}<~ZU41EN^(P%r;X90r(AaNH22c<;Pv-U=rtT=I=yaFF@9L z9~R&>-Bn!WKYr`50N@1*(4D|e1uNr&D@ad% zAwx1*bnV%#5ZH;U8%o|F+;bT_90qp~0*s@w=9XDJghYNj2`H-xA9Ui!Z4=u@nDw2` z8Sb>L7K{liVxuT(2}lyGp(#B3@_-)|!#Zh-Xplk*kBH~pjdrG7i^uE5(O5EV0gye< z$4kZ|mXz`Q9dr~*^PVA?p6xmp^{IF0*mFl$4$U-*KQM0d~h7G6hI-X%Z zRWs~4AcUe}2i%0r8zT$0i6W8$p30+RLFm%b1yAs<_u=I z+MGJ^ieTQyT(k*KJcvWk6}2_P9~+@SS8MN@(%LZ+Tz)WrqZo(2AVdNcxKvbJ`^a3k z$n(@Fa~I^X3Od5FtG!CdI@P2id-(}w0FdPq?~JT`5;K-_`~f07@ae-8p6Y`{q>t^M zl@P^QW8TA0*CRM9X;hwc+%;x&#=K3J5hEW1^=4A^?ZwB&KedZ02pebIg`fowa0xkH zFa41Hk=yBs9=W&HVfqyL$4l3yK{mp3%r1~m=9jB7;|94DSI>VK>{a`7}tF9TMDDyTswP+uzQhy*px01vCr8V4K+o4mSBii->kMc^N`i7nk zin#G2Hs0APPjv8nQv*72p#+Ru&Q<^9tiR3l!>j(M#^#0$tPC>ILPLG_u-V`!3j@Qw zr)?(A{^qaWQX7|Xc|E}cYc6z|^&l%{@Jbj+(N;h}60MaBx%0Nu`s6@>o4LuveZ++J z+BKk$H7=OKe7WRpkdTIKjA?u1l+lLFK?Kf{uk1ubKW_^T_=^hp_D5Va=)SxToejd{2!JYnMMruUjJUuYsH|6?19`ouBKO zIvgurzaTnQ{T!J{Gh;hKZp~I>CU#{?;2|15JC8J1j6KO5PihZsc<8H!p?Gt~SM-R0 z7cqZ1Zb><>gEIN$pZlJR1WcjRQE4b!0ign$D9HqH>bLDG9W4_nd}S7F&|Z8DQib@lIR0w!_yrLlzD>p;l-(Y8y&ItKK1M@g<#}~ z%puSM3PIZL6`W@pn^cIb7Oc_=e;A01s&VO4j-{gEU=I>JNlt3Jg4m{HQdTT=Xs_M~_G zg|~&25;StN4n_A_9N7uj)=JmDdKih{K$;NkjLBW#!v(1!vDX!24^#AgGv@yR;LH@U`|PnRtGYORX~ zt=>?WPQJPp@u9c$~zLxLtK1ihL= z*!50Xkrn0OkgK>Z-ik>w)ZJ&73wC=%Te4$3YI>jUEAG!)#Thn&>9I%{A*Jd$YO(Po zrKM(-0~3Tr`z6~qeAiQNie!>N`)&Nz=eobNu%s?*Jwcz$cmak}D}KWB)>?+2%>{4R0U6NsUn(gdsQh<%?KF zHt+(#3f$8DvSGY$LDRwdO<`Ex(OQeSL9#12fdI9KU9?e_3+FmFMyrF~Q{shiP8tOe z_p3SoKv+C&PxUmTjhhk1QrV{Y-DvAUQ}*FV={{TA*TcojfyExBvn;=&umgPAYIB^{KJb^Zq4cXR{W^p!t$ z%o~sjkAo~@Oy6p2yn&WHND&l z%pEa9Iyv+RhTQ}_CtF(GbM5sKvOl`at+Bu2dEGiRZ-Qtxh_KoV)qv-=17nV&jY?1;g7CSAKuuuB%$k%iMxfoEEtx{L?R3nS*{t z8+#Be@#7arhW_vbPgidbOKVWcXJ!54H^>(M@EaE1_D)t%&r4JA&!;d7UzMOgUx$^e zrMEMvA-SAZ{%q9$aPeJ!A3H(y2ME0*hv^a+@gINZS2SgCK1r+?Nws2utx|`ee);s6 z!5JxrnmOS7`0b(~77AG}@#!r8q9&Fl)8v@p^5ar(k|zGgZ=6gWuLrX>xB4yS*jZQQ z-#m?F&L$61Xs^s` z2p*v8Q)C|kSC@{u zNZN@hC~_dhA0N(4k*+LPWussqz27^~mMO(oZ4OGzm42MXEud+u2+Y)V6GR)GdQE$x zZeQQRh|0KLEt7~m8CPcgX`qAJ8CAYpLI~drDd}5cfvNsC?aq@(MR!RtC;PHpZzqds zThuf~)F)|Yswo~_UI9+R^NAf`(vw_9jH@#1IK!hG2yg=f1#Sc^DUZD#;JBq6!WjH3 z5snaEL68As0gPsx3CuucH?X_#)3gOjb3n}r%@`w?Nq!%AlDip2*OEz3l$?`&%&D>T z5;$rxzK=}+SB~bR9!dYH+;)1!keT!j72Wb<9alMZ#lCCx->k#({O3qsh+$IbnGaQ} zblH9oX5;psoavR#Ol$KQP@i;)@8Gk-V;#M#9XF$2#~wJiO!B0$-it&3cK47_Oay$F z5Z3ioHpE(Y0%k&V3{+HvFo$viL29%P4TP8N-ad#Q)|7Ej0Uq@EcIm>6xhTnST9@N3cb&p1_L760boOQ)yc*|E2k3-)Cc#iKwiP9_zcO`XbeBt(~>d zR;-WNk~kGEC|O1gHzKhH^+5Y2P0kc!x2HDr3I_ul0=_~3n>1kxn5qQ;!L{B?^AP^p zZ0d3Y33cNMw0-v;&Y5^NEg!%M{tO6x=|N}zLKmf)*mb*nHOD(-PI|gMbU)o-Ed<{= zI3z4c>0z-oMB*$&?YN=Jhlg!WQm^pzu0^0xT@B*Yj^^Su0=O2x;vz$yE~PJMN5f<0@5Yj zAl)q`BGQdYgF%CVN{NE`O+a+_*?XUJ-tT#zcl(Dw5uL2L);+Hn*SN+An25WE!{)~p zPmHw|`o(CKhFYgQHRqg@J>~k?`GC+vzp3TmEvg1Q<@lC*yGFq)9PS-vN;|A@8?$9Zdu$Q{U1BI*Zx+>13==OP({cdk257B$ zns290yBOEgqWM2`5?TpM